我试图在安装任何软件包之前运行一些策略脚本.例如:
{
"name": "pre-hook-check",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"preinstall": "echo preinstall",
"postinstall": "echo postinstall"
},
"author": "",
"license": "ISC",
"dependencies": {
"abc": "^0.6.1",
"preact": "^8.2.5"
}
}
Run Code Online (Sandbox Code Playgroud)
上面的示例中的安装前和安装后脚本似乎只在我这样做时才有效npm install,但我希望每次尝试安装任何东西时都会运行.
例如:假设我想编写一个脚本,以便在我的团队运行时检查包的版本npm install <some package>.我想检查安装包的版本并验证它的版本是否高于"1.0.0",否则不要让它们安装.
我打算写一个预安装脚本
npm info lodash version
并检查我尝试安装的任何软件包的版本.如果版本不可用,我计划在安装之前将其设置为交互式并询问用户的确认.
我正在维护以下目录结构:
/home/user/Desktop/
|-- app/
| |-- package.json
| `-- server.js
|-- node/
| |-- bin/
| | |-- node
| | `-- npm
| |-- include/
| |-- lib/
| `-- share/
|
`-- npm.sh
Run Code Online (Sandbox Code Playgroud)
我希望我所有本地安装的节点模块都驻留在目录中node.也就是说,如果我npm install在目录中运行app,最初它会将模块安装在当前目录(app)中,然后将node_modules文件夹移动到名为的外部目录node.为此,我编写了一个脚本npm.sh并将mv(move)命令放在postinstall脚本中package.json.
这些是文件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/bash
Run Code Online (Sandbox Code Playgroud)
内容app/package.json:
{
"name": "app",
"version": …Run Code Online (Sandbox Code Playgroud)