我正在维护以下目录结构:
/home/user/Desktop/
|-- app/
| |-- package.json
| `-- server.js
|-- node/
| |-- bin/
| | |-- node
| | `-- npm
| |-- include/
| |-- lib/
| `-- share/
|
`-- npm.sh我希望所有本地安装的节点模块都驻留在node.目录中。也就是说,如果我在目录npm install中运行app,最初它将在当前目录(app)中安装模块,然后将node_modules文件夹移动到名为node的外部目录。为此,我编写了一个脚本npm.sh,并将mv (move)命令放在package.json的postinstall脚本中。
这些是npm.sh和package.json文件。
npm.sh含量
#/bin/bash
export PATH=/home/user/Desktop/node/bin:$PATH
export NODE_PATH=/home/user/Desktop/node/node_modules
export NODE_MODULE_ROOT=/home/user/Desktop/node
/bin/bashapp/package.json含量
{
"name": "app",
"version": "1.0.0",
"scripts": {
"postinstall": "mv node_modules $NODE_MODULE_ROOT",
"start": "node server.js"
},
"dependencies": {
"jwt-simple": "^0.5.1"
}
}但问题是:当我做./npm.sh && cd app && npm install时,一切都按预期进行。但是,当我执行npm install jwt-simple时,postinstall脚本不会被执行。
有什么方法可以让它对单个npm install <package>有效吗?或者有什么更好的方法来实现这一点?
发布于 2018-07-03 13:15:50
您可以在安装包后使用npm钩子脚本来做一些事情。
创建node_modules/.hooks/postinstall可执行文件,它也将在npm install <package>之后运行。
注意:我注意到在NPM5.1.0版本到6.0.1之间NPM钩子脚本存在问题。因此,如果你有问题的钩,检查你的npm版本,并在必要时进行升级。
发布于 2019-08-15 15:09:08
对于其他人来说,当安装一个特定的包时,npm不会在package.json中运行预/后安装。你可以在这里查一下,https://npm.community/t/preinstall-npm-hook-doesnt-execute-when-installing-a-specific-package/2505。不知道是否有办法绕过,但我也一直在找。
https://stackoverflow.com/questions/44362462
复制相似问题