1

npm publish 命令创建一个 tarball(带有srcdir)并将其发布到注册表。

有没有办法排除src目录避免使用.npmignore

4

2 回答 2

2

npm 没有提供其他内置功能来实现这一点,因此需要自定义解决方案。

如果您真的不想使用.npmignoresrc目录保留在已发布的包之外,那么请考虑在您的npm 脚本pre中使用和post挂钩。

相关的钩子是:

  • prepublishOnly:在包装准备和包装之前运行,仅在npm publish...

  • postpublish: 包发布后运行。

对于 *nix 平台

  1. prepublishOnly脚本添加到package.jsonscripts的部分,在发布之前将目录移动到项目目录之外的另一个位置。src

  2. 此外,添加一个postpublish脚本,src在发布完成后将目录移回项目目录。

  3. 运行npm publish(正常)以发布您的包。

例如:

包.json

...
"scripts": {
  "prepublishOnly": "mv src/ ../",
  "postpublish": "mv ../src .",
  ...
},
...

注意:您需要确保src您选择通过脚本临时将src目录移动到的路径位置不存在其他文件夹/目录。prepublish

跨平台:

对于跨平台解决方案,请考虑使用shx。这个包包括一个可移植的mv命令。在这种情况下,请配置您的prepublishpostpublish脚本,如下所示:

包.json

...
"scripts": {
  "prepublishOnly": "shx mv src/ ../",
  "postpublish": "shx mv ../src .",
  ...
},
...
于 2019-03-07T12:32:11.233 回答
0

正如@RobC 的回答,没有其他方法可以避免使用.npmignore 的自定义解决方案。

由于我在 Jenkins 管道中使用发布命令,因此解决方案是创建一个临时 .npmignore,而直接在 Jenkinsfile 中发布步骤:

echo "src/" >> .npmignore
echo "*.js" >> .npmignore
echo "*.json" >> .npmignore
echo "Jenkinsfile" >> .npmignore
curl --insecure -u ${USERPASS} 'https://my-repo/api/npm/auth' >> /home/jenkins/.npmrc
npm publish --registry https:// my-repo/api/npm/npm-local/ 
于 2019-03-11T11:51:48.133 回答