npm,避免在不使用 .npmignore 的情况下发布 src dir



Thenpm publish命令创建一个压缩包(带有srcdir)并将其发布到注册表。

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

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

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

相关的钩子是:

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

  • postpublish:在包发布后运行。

对于 *nix 平台

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

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

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

例如:

包.json

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

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

跨平台:

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

包.json

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

可以使用 package.json 中的files属性显式包含要发布的文件。

{
"files": [
"dist",
"index.js"
]
}

@RobC答案,除了避免使用 .npmignore 的自定义解决方案之外,没有其他方法。

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

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/ 

相关内容

最新更新