NPM预安装脚本

时间:2017-10-04 04:15:48

标签: node.js npm npm-install yarnpkg npm-scripts

我正在尝试在安装任何软件包之前运行一些策略脚本。 例如:

{
  "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"
  }
}

上面示例中的安装前和安装后脚本似乎仅在我执行npm install时才有效,但我希望每次尝试安装任何内容时都会运行。

例如:假设我想编写一个脚本,以便在我的团队运行npm install <some package>时检查包的版本。我想检查安装包的版本并验证它的版本是否高于“1.0.0”,否则不要让它们安装。

我打算编写一个预安装脚本

npm info lodash version

并检查我尝试安装的任何软件包的版本。如果版本不可用,我计划在安装之前将其设置为交互式并询问用户的确认。

1 个答案:

答案 0 :(得分:3)

你是正确的预安装脚本仅在我们进行npm安装时运行,并且在安装模块之前目前无法运行脚本但你可以使用 shell脚本 npm view < /强> https://docs.npmjs.com/cli/view这样做。

首先,创建一个moduleinstall.sh文件,该文件与package.json和下面的shell脚本具有相同的范围

echo 'Enter the name of the module'
read module_name
npm view $module_name version 
echo "Do you want to install this version(y/N) " 
read option 
if [ "$option" = "N" ] || [ "$option" = "n" ]
then 
echo "exiting...."
exit 1
else
npm install $module_name
fi

确保使用chmod +x moduleinstall.sh使其可执行,然后将其写入package.json

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"info": "./moduleinstall.sh"
}

现在您只需运行命令npm run info,然后按照说明通过检查版本来安装模块。您可以使用npm视图和shell脚本的不同选项来推进它。 希望这会有所帮助。