npm,避免在不使用 .npmignore 的情况下发布 src 目录
npm, avoid publishing of src dir without using .npmignore
npm publish
命令创建一个 tarball(使用 src
目录)并将其发布到注册表。
有没有办法排除 src
目录避免使用 .npmignore
?
npm 没有提供其他内置功能来实现这一点,因此需要自定义解决方案。
如果你真的不想用.npmignore
to keep the src
directory out of your published package, then consider utilizing pre
and post
hooks in your npm scripts代替。
相关的钩子是:
prepublishOnly
: Run BEFORE the package is prepared and packed, ONLY on npm publish
...
postpublish
: Run AFTER the package is published.
对于 *nix 平台
将 prepublishOnly
脚本添加到 package.json 的 scripts
部分,移动 src
目录到项目目录之外的另一个位置,然后再发布。
此外,添加一个 postpublish
脚本,在发布完成后将 src
目录移回项目目录。
运行 npm publish
(按正常情况)发布您的包。
例如:
package.json
...
"scripts": {
"prepublishOnly": "mv src/ ../",
"postpublish": "mv ../src .",
...
},
...
注意:您需要确保在您选择临时移动[=13]的路径位置不存在其他src
folder/directory =] 目录通过你的 prepublish
脚本。
跨平台:
对于跨平台解决方案,请考虑使用 shx。这个包包括一个可移植的 mv
命令。在这种情况下,请改为配置您的 prepublish
和 postpublish
脚本,如下所示:
package.json
...
"scripts": {
"prepublishOnly": "shx mv src/ ../",
"postpublish": "shx mv ../src .",
...
},
...
作为@RobC 的回答,没有其他方法可以避免使用 .npmignore 的自定义解决方案。
由于我在 Jenkins 管道中使用 publish 命令,一个解决方案是创建一个临时的 .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/
npm publish
命令创建一个 tarball(使用 src
目录)并将其发布到注册表。
有没有办法排除 src
目录避免使用 .npmignore
?
npm 没有提供其他内置功能来实现这一点,因此需要自定义解决方案。
如果你真的不想用.npmignore
to keep the src
directory out of your published package, then consider utilizing pre
and post
hooks in your npm scripts代替。
相关的钩子是:
prepublishOnly
: Run BEFORE the package is prepared and packed, ONLY onnpm publish
...
postpublish
: Run AFTER the package is published.
对于 *nix 平台
将
prepublishOnly
脚本添加到 package.json 的scripts
部分,移动src
目录到项目目录之外的另一个位置,然后再发布。此外,添加一个
postpublish
脚本,在发布完成后将src
目录移回项目目录。运行
npm publish
(按正常情况)发布您的包。
例如:
package.json
...
"scripts": {
"prepublishOnly": "mv src/ ../",
"postpublish": "mv ../src .",
...
},
...
注意:您需要确保在您选择临时移动[=13]的路径位置不存在其他src
folder/directory =] 目录通过你的 prepublish
脚本。
跨平台:
对于跨平台解决方案,请考虑使用 shx。这个包包括一个可移植的 mv
命令。在这种情况下,请改为配置您的 prepublish
和 postpublish
脚本,如下所示:
package.json
...
"scripts": {
"prepublishOnly": "shx mv src/ ../",
"postpublish": "shx mv ../src .",
...
},
...
作为@RobC 的回答,没有其他方法可以避免使用 .npmignore 的自定义解决方案。
由于我在 Jenkins 管道中使用 publish 命令,一个解决方案是创建一个临时的 .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/