在发布时是否可以更改Node.js npm包的根目录?我所拥有的是:
├── lib
├── package.json
├── .npmignore
├── src
│ ├── index.js
│ └── sub
│ └── mymodule.js
└── test
在/src
中是我的所有ES2015源代码。我将Babel转换为我的/lib
目录。我main
中的package.json
指向lib/index.js
。之后我可以制作npm publish
(我的.npmignore
设置为src
,因此只会发布lib
。现在我的包被部署到npmjs.com,在另一个包中我可以用import index from 'mypackage'
导入它。
到目前为止一切顺利。但是,如果我想直接导入sub/mymodule.js
怎么办?我必须写import mymodule from 'mypackage/lib/sub/mymodule'
。我真正想要的是import mymodule from 'mypackage/sub/mymodule'
在我的路径中没有/lib/
。
我怎样才能做到这一点? npm文档提到directories.lib我可以在package.json
中设置,但似乎它将被完全忽略。我将其设置为./lib
,但它什么也没做。
答案 0 :(得分:4)
您可以使用/lib
发布npm publish lib
目录。
记得在发布之前将package.json文件复制到lib目录。
建议使用npm脚本:
"scripts": {
"build": "babel src --out-dir lib",
"prepublish": "npm run build && cp ./package.json lib"
}
答案 1 :(得分:3)
我也经历过完全相同的痛苦。经过大量的游戏,我得到了基于这篇文章中的答案的答案:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"lint": "eslint src/**",
"build": "rm -rf ./lib/* && babel src -d lib -s && cp ./package.json lib",
"prepublish": "[[ \"$PWD\" =~ YOUR_DIR_HERE/lib ]]",
"pub": "pushd ./ && npm run build && cd lib && npm publish && popd"
}
这意味着当不在lib目录中时,“npm publish”将失败,从而防止错误部署。我并不热衷于使用自定义的“npm run pub”,但这是我现在能够提出的最佳解决方案。