Stack Overflow Asked by Jeanluca Scaljeri on July 29, 2020
I have a library which was used as follows
import { Foo } from '@me/core';
const foo = new Foo();
The package.json
of that library looks like
"name": "@me/core",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "MIT",
...
With dist/index.js
its entrypoint. Now, however, I would provide an import for NodeJs projects only and one for web projects. Ideally I would have something like this for NodeJs
import { Foo } from '@me/core/nodejs';
and if you’re working on a web-project you could do
import { Foo } from '@me/core/web';
My understanding is that both @me/core/nodejs
and @me/core/web
will be different NPM packages this way, which is not what I want. I want it to be in 1 npm package.
I tried to changed the library’s index.ts file, from
export * from './foo';
into
import * as nodejs from './nodejs';
import * as web from './web';
export { web, nodejs };
This actually works, but I have to use it now (in a NODEJS project) as follows
import { nodejs } from '@me/core';
const foo = new nodejs.Foo();
Is there maybe a way to import this such that I don’t need the nodejs
everytime?
As you can see I’m not so sure what I should do here so any help would be appreciated!
UPDATE: Based on the suggestions by @Klaycon I see the following error:
As you're using ECMAScript modules, please refer to node.js docs on package entry points:
In a package’s package.json file, two fields can define entry points for a package: "main" and "exports". The "main" field is supported in all versions of Node.js, but its capabilities are limited: it only defines the main entry point of the package.
The "exports" field provides an alternative to "main" where the package main entry point can be defined while also encapsulating the package, preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to define a public interface for their package.
So, in your package.json, you could define exports
like this:
"main": "dist/index.js",
"exports": {
".": "dist/index.js",
"./nodejs": "dist/nodejs",
"./web": "dist/web",
}
Correct answer by Klaycon on July 29, 2020
2 Asked on November 24, 2021 by tierno
1 Asked on November 24, 2021 by marlen-schreiner
2 Asked on November 24, 2021 by tyler-klein
1 Asked on November 24, 2021 by san22
3 Asked on November 24, 2021
1 Asked on November 24, 2021 by ted-morin
1 Asked on November 24, 2021 by kkkokt
1 Asked on November 24, 2021 by kelly-milligan
1 Asked on November 24, 2021 by maulik-patel
2 Asked on November 24, 2021
4 Asked on November 22, 2021 by mike-k
1 Asked on November 22, 2021 by suhas_mudam
1 Asked on November 22, 2021 by umar-farooq
1 Asked on November 22, 2021 by q-studio
4 Asked on November 22, 2021
1 Asked on November 22, 2021 by ravanelli
2 Asked on November 22, 2021 by maksim-tarasenko
Get help from others!
Recent Questions
Recent Answers
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP