我有一个用于内部git服务器上托管的常见组件的npm软件包。由于某些原因,当我在另一个项目中调用npm install
时,我想在其中使用它而不会运行prepare
钩子。显然,这不起作用,因为npm软件包需要在node_modules中有一个/dist
文件夹才能使用该软件包。
我已经尝试了诸如使用不推荐使用的prepublish
钩子之类的方法,甚至没有被调用。我还尝试做postinstall
来查看是否可以在安装后进行构建,而该钩子确实因为未安装devDependencies而被称为失败
package.json
{
"name": "common-components",
"version": "0.1.0",
"scripts": {
"prepare": "npm run build",
"build": "ng build",
...
},
"private": true,
"dependencies": {
...
},
"devDependencies": {
...
},
}
用于安装的命令
npm install --save git+ssh://{URL-to-common-components-repo}}
我已经通读了npm-scripts文档https://docs.npmjs.com/misc/scripts,似乎他们坚持认为对于这种确切的用例,应始终调用prepare
钩子
仅作说明,我在NPM社区https://npm.community/t/using-npm-ci-does-not-run-prepare-script-for-git-modules/632/4上发现了此错误。
我正在使用npm 6.4.1,该版本应该可以根据错误进行操作
答案 0 :(得分:3)
最近要检查一个软件包的一件事-如果有.gitignore而不是.npmignore,则npm可能会忽略您的/ dist文件夹。在这种情况下,添加一个空的.npmignore即可。
”如果没有.npmignore文件,但是有.gitignore文件,则 npm将忽略与.gitignore文件匹配的内容。如果你想 包括.gitignore文件中排除的内容,您可以 创建一个空的.npmignore文件以覆盖它。”
答案 1 :(得分:0)
对于那些对此表示怀疑的人。我无法使它正常工作。我最终要做的是将组件托管在私有npm注册表上,并且工作正常,因为npm publish
命令将完成构建并仅发布dist文件夹
答案 2 :(得分:0)
在 package.json 中添加 main
为我解决了这个问题。
"main": "./dist/index.js",
"scripts": {
"build": "babel src --out-dir dist",
"prepare": "npm run build",
"lint": "eslint ."
},
node v14.15.4
npm 6.14.11
答案 3 :(得分:0)
如果添加一个空的 .npmignore
没有帮助,您可以尝试在 package.json#files
中明确指定 dist 中的所有文件。如果可行,您可能需要考虑使用与 dist 中的文件匹配的通配符模式来简化 package.json
。
package.json
...
"files": [
"source",
"dist/cjs/main.js",
"dist/es/main.js"
]
}
查看 npm/cli 存储库中类似问题的评论https://github.com/npm/cli/issues/1287#issuecomment-635021757