比如:
"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
命令就不行?
不都是一样的道理吗?
比如:
"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
命令就不行?
不都是一样的道理吗?
某种程度来说,是可以的;
比如你全局安装了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 ...
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
涉及到npm script的执行机制,执行前会设置一些环境变量,最重要的就是项目
node_modules/.bin
的绝对路径添加到环境变量 PATH 中,所以在npm script 中可以使用本地安装的工具。 从而解释了为什么如果抽出来在shell运行就不行想抽出来执行也可以, 用
npx
命令,它在执行时,会到node_modules/.bin
路径检查命令是否存在,对应的工具可以不用全局安装。官网示例