该npm publish
命令创建一个 tarball(带有src
dir)并将其发布到注册表。
有没有办法排除src
目录避免使用.npmignore
?
npm 没有提供其他内置功能来实现这一点,因此需要自定义解决方案。
如果您真的不想使用.npmignore
将src
目录保留在已发布的包之外,那么请考虑在您的npm 脚本pre
中使用和post
挂钩。
相关的钩子是:
prepublishOnly
:在包装准备和包装之前运行,仅在npm publish
...
postpublish
: 包发布后运行。
将prepublishOnly
脚本添加到package.jsonscripts
的部分,在发布之前将目录移动到项目目录之外的另一个位置。src
此外,添加一个postpublish
脚本,src
在发布完成后将目录移回项目目录。
运行npm publish
(正常)以发布您的包。
例如:
包.json
...
"scripts": {
"prepublishOnly": "mv src/ ../",
"postpublish": "mv ../src .",
...
},
...
注意:您需要确保src
您选择通过脚本临时将src
目录移动到的路径位置不存在其他文件夹/目录。prepublish
对于跨平台解决方案,请考虑使用shx。这个包包括一个可移植的mv
命令。在这种情况下,请配置您的prepublish
和postpublish
脚本,如下所示:
包.json
...
"scripts": {
"prepublishOnly": "shx mv src/ ../",
"postpublish": "shx mv ../src .",
...
},
...
正如@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/