如何有条件地从package.json导出



我的package.json中有exports部分:

"exports": {
"import": "./dist/a.es.js",
"require": "./dist/b.umd.js"
},

但对于发展,我想有不同的路径:

"exports": {
"DEV": {
"import": "./src/a.es.js", // <---------- SRC
"require": "./src/b.umd.js" , // <---------- SRC
},
"PROD": {
"import": "./dist/a.es.js",
"require": "./dist/b.umd.js"
}
},

是否有办法使用一些环境变量?

我可以使用下面的设置来解决这个问题

在我的程序导入的包中:

{
"name": "my-special-node-package",
"version": "1.0.0",
"license": "MIT",
"exports": {
".": {
"production": {
"require": "./prod/index.cjs.js",
"import": "./prod/index.esm.js"
},
"default": {
"require": "./index.cjs.js",
"import": "./index.esm.js"
}
},
}
}

然后在我的程序中:

// index.js
const myPkg = require('my-special-node-package')

在生产环境中,我使用node --conditions=production index.js执行节点程序。否则我在dev模式下使用node index.js

另外,由于我使用的是TypeScript,而且TypeScript只在开发期间使用,所以我可以将默认的require/import值更改为指向index.ts文件。

{
// ....
"exports": {
".": {
"production": {
"require": "./dist/index.cjs.js",
"import": "./dist/index.esm.js"
},
"default": "./index.ts"
},
}
}

这个设置允许我的本地开发总是直接TS文件,而不是依赖于每当它改变时要构建的每个包。

最新更新