【问题标题】:Change root directory on npm publish在 npm publish 上更改根目录
【发布时间】:2016-12-26 03:58:57
【问题描述】:

当我进行发布时,是否可以更改我的 Node.js npm 包的根目录?我所拥有的如下:

├── lib
├── package.json
├── .npmignore
├── src
│   ├── index.js
│   └── sub
│       └── mymodule.js
└── test

/src 中是我所有的 ES2015 源代码。我用Babel 将它转译到我的/lib 目录中。我的package.json 中的main 指向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,但它什么也没做。

【问题讨论】:

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


    【解决方案1】:

    我也一直在经历同样的痛苦。在玩了很多之后,我最终得到了一个基于这篇文章中的答案:

    "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"
    }
    

    这意味着“npm publish”不在 lib 目录中时会失败,从而防止错误部署。我并不热衷于使用自定义的“npm run pub”,但这是我目前能想到的最佳解决方案。

    【讨论】:

    • 呃 - 我希望找到比这更好的答案。我也在做同样的事情。如果我从 cli 手动执行此操作,我真的不介意“npm publish”失败,但问题是,现在我对所有自动发布的构建工具都有一个特殊情况。我不能再假设“npm publish”是你发布包的方式。
    【解决方案2】:

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

    建议使用 npm 脚本:

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

    【讨论】:

    • 是的,谢谢,但这是一个非常丑陋且容易出错的解决方法,因为您必须 cd 进入 /lib 并从该目录执行 npm publish。想象一下,您忘记了这一步,并且不小心从项目的根目录中执行了npm publish。你最终会进入一个不再工作的库。
    • 我今天看到这条评论,发现您可以在package.json 中设置private: true,这样可以阻止所有发布尝试。然后在您的/lib 目录中,确保在复制package.json 时grep out private: true,这将限制您只能在准备好的目录中发布。
    猜你喜欢
    • 2018-04-01
    • 2016-02-05
    • 1970-01-01
    • 2013-07-14
    • 2017-08-31
    • 2021-12-31
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多