在npm发布上更改根目录

Lon*_*ick 9 path package node.js npm node-modules

我在发布时是否可以更改Node.js npm包的根目录?我所拥有的是:

??? lib
??? package.json
??? .npmignore
??? src
?   ??? index.js
?   ??? sub
?       ??? mymodule.js
??? test
Run Code Online (Sandbox Code Playgroud)

In /src是我的所有ES2015源代码.我将Babel引入我的/lib目录.将main在我的package.jsonlib/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但它什么也没做.

小智 5

您可以/lib使用 来发布您的目录npm publish lib。请记住在发布之前将 package.json 文件复制到 lib 目录。

建议使用 npm 脚本:

"scripts": { "build": "babel src --out-dir lib", "prepublish": "npm run build && cp ./package.json lib" }

  • 是的,谢谢,但这是一个非常丑陋且容易出错的解决方法,因为您必须 cd 到“/lib”并从该目录执行“npmpublish”。想象一下,您忘记了该步骤,并且意外地从项目的根目录执行了“npmpublish”。你最终会进入一个不再工作的图书馆。 (5认同)
  • 我今天看到这个评论,发现你可以在 `package.json` 中设置 `private: true`,这会阻止所有发布尝试。然后在您的“/lib”目录中,确保在复制“package.json”时 grep 出“private: true”,这限制您只能在准备好的目录中发布。 (3认同)