package.json script里写的命令为什么不能单独提出来执行

比如:

"scripts": {

"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",

},

npm run dev 可以直接运行。
但是 如果抽出来在shell运行
webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
命令就不行?
不都是一样的道理吗?

阅读 4.2k
2 个回答

涉及到npm script的执行机制,执行前会设置一些环境变量,最重要的就是项目node_modules/.bin的绝对路径添加到环境变量 PATH 中,所以在npm script 中可以使用本地安装的工具。 从而解释了为什么如果抽出来在shell运行就不行

想抽出来执行也可以, 用npx命令,它在执行时,会到node_modules/.bin路径检查命令是否存在,对应的工具可以不用全局安装。官网示例

$ npm i -D webpack
$ npx webpack ...

某种程度来说,是可以的;

比如你全局安装了webpack-dev-server;因为webpack-dev-server可认为是一个程序,系统会根据默认的搜索链,搜索支持这条命令的的入口,比如,在我的电脑上执行:

$ which webpack-dev-server
> /usr/local/bin/webpack-dev-server

可以看到,直接输入webpack-dev-server,实际就相当于一个快捷方式,实际运行的是/usr/local/bin/webpack-dev-server

当然,假如题主电脑无法运行,那只能证明这条命令没有全局安装(不同的电脑寻找的方式会有差异),而npm run会比在shell运行多一个“搜索”,那就是会多“搜索”当前目录的./node_modules的文件,所以题主可以试试./node_modules/webpack-dev-server --line ...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题