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
命令就不行?
不都是一样的道理吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
涉及到npm script的执行机制,执行前会设置一些环境变量,最重要的就是项目
node_modules/.bin
的绝对路径添加到环境变量 PATH 中,所以在npm script 中可以使用本地安装的工具。 从而解释了为什么如果抽出来在shell运行就不行想抽出来执行也可以, 用
npx
命令,它在执行时,会到node_modules/.bin
路径检查命令是否存在,对应的工具可以不用全局安装。官网示例某种程度来说,是可以的;
比如你全局安装了
webpack-dev-server
;因为webpack-dev-server
可认为是一个程序,系统会根据默认的搜索链,搜索支持这条命令的的入口,比如,在我的电脑上执行:可以看到,直接输入
webpack-dev-server
,实际就相当于一个快捷方式,实际运行的是/usr/local/bin/webpack-dev-server
;当然,假如题主电脑无法运行,那只能证明这条命令没有全局安装(不同的电脑寻找的方式会有差异),而npm run会比在shell运行多一个“搜索”,那就是会多“搜索”当前目录的
./node_modules
的文件,所以题主可以试试./node_modules/webpack-dev-server --line ...