npm script执行正常但直接node运行nightwatch报错问题咨询
为什么直接执行
node nightwatch会报错,而npm run e2e可以正常运行? 这个问题我之前也碰到过,核心差异在于npm scripts会自动帮你处理本地依赖的可执行文件路径,而直接用node命令执行时不会。
具体原因拆解:
- 当你运行
npm run e2e时,npm会自动把项目根目录下的node_modules/.bin目录添加到当前终端的环境变量PATH中。这个.bin目录里存放着所有你安装的开发依赖提供的可执行脚本(比如nightwatch),所以系统能直接找到并执行它,背后实际调用的是node_modules/.bin/nightwatch。 - 而你直接执行
node nightwatch时,node命令会在当前工作目录下查找名为nightwatch的文件(比如nightwatch.js或者nightwatch/index.js),但你的项目里并没有这个文件——nightwatch的实际入口在node_modules/nightwatch/bin/nightwatch.js,所以node找不到对应的模块,就抛出了Error: Cannot find module...的错误。
解决方法:
你可以用以下几种方式替代直接的node nightwatch命令:
- 方式一:调用nightwatch的完整本地路径
直接指定nightwatch的实际入口文件路径给node:node node_modules/nightwatch/bin/nightwatch.js -c tests/nightwatch.conf.js -e chrome - 方式二:用npx执行本地依赖
npx是npm 5.2版本后自带的工具,它会自动查找项目本地node_modules/.bin里的可执行文件:npx nightwatch -c tests/nightwatch.conf.js -e chrome - 方式三:继续使用npm scripts
这是最省心的方式,npm会帮你自动处理路径问题,不需要手动调整任何东西。
内容的提问来源于stack exchange,提问作者Madeline Ries
相关产品推荐
相关产品推荐

