在npm发布上更改根目录

时间:2016-08-19 05:03:42

标签: node.js path npm package node-modules

在发布时是否可以更改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,但它什么也没做。

2 个答案:

答案 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”,但这是我现在能够提出的最佳解决方案。