我正试图为教育目的构建我的第一个NPM包,我已经被困在手册中并查看了几个小时的其他项目,试图让它发挥作用.
项目设置
我的包构建成功,并且从我可以断定的是,分别为ESM和CommonJS目标生成了所有文件.
该程序包也可以同时使用yarn
和npm
成功安装,我try 了这两种口味,只是为了确保我不是针对其中一种.My"Success"表示安装包全部为绿色,并显示在node_modules
下方.
但是,当我try 使用项目中的任何对象时,我收到一个错误,指出模块未导出:
// Load application object and attach UX
import {app} from "@myproject/package/src/Application";
document.body.onload = () => {
app.attachUx(document.body);
};
// Compiler error:
// Module not found: Error: Package path ./src/Application is not exported from package
目标环境
假设我正确理解了"NPM包",IDE不应该导入@myproject/package/src/Application
,而应该导入@myproject/package/Application
,因为编译目标应该"决定"它是否使用类型 script source 代码,对于CommonJS是dist/cjs
,对于eMac是dist/esm
?
如果我确实正确理解了NPM包目标,那么当"eMac"目标使用export.import
条目时,应该使用export.import
条目,而"CommonJS"目标使用export.require
条目吗?
终于
为什么我的项目中没有任何内容被导出?NPM不识别任何文件或定义,这意味着我try 了以下行的每一种组合来导入我的Application
:
import {app} from "@myproject/package/src/Application";
import {app} from "@myproject/package/src/Application.js";
import {app} from "@myproject/package/Application";
import {app} from "@myproject/package/Application.js";
import {app} from "@myproject/package/dist/cjs/Application";
import {app} from "@myproject/package/dist/cjs/Application.js";
import {app} from "@myproject/package/dist/esm/Application";
import {app} from "@myproject/package/dist/esm/Application.js";
解
谢谢@mganney指出出口条目需要更准确.我最终得到了下面的Exports条目,它适用于任何场景,包括
- 从 node 、ESM和CJS导入
- ESM和CJS的显式/DIST导入
- 用于Typescript 源的显式/src导入
- 适用于IDE中的类型提示,如PHPStorm和VSCode
"exports": {
"./*": {
"import": "./dist/esm/*.js",
"require": "./dist/cjs/*.js",
"node": "./src/*.ts"
},
"./dist/*": {
"import": "./dist/esm/*",
"require": "./dist/cjs/*"
},
"./src/*": "./src/*.ts"
}