我正在尝试在Windows 10上设置以下npm脚本(使用git bash,MINGW):
package.json 中scripts
的摘录:
...
"sass:build": "cat assets/styles/* | node-sass | postcss --no-map -u autoprefixer -u cssnano > dist/public/styles/styles.css.min",
"sass:watch": "watch sass:build ./assets/styles/",
...
运行npm i --save-dev node-sass postcss autoprefixer cssnano watch
后,我收到此错误:
$ npm run sass:watch
> thenewells@0.0.0 sass:观看C:\ repos \ thenewells
>看sass:build ./assets/styles/>观看./assets/styles/
文件名,目录名或卷标语法不正确。
但如果我做npm i -g node-sass postcss autoprefixer cssnano watch
那么就会发生这种情况......
$ watch'npm run sass:build'./assets/styles/
>看着./assets/styles/
> thenewells@0.0.0 sass:build C:\ repos \ thenewells
>猫资产/款式/ * | node-sass | postcss --no-map -u autoprefixer -u cssnano> dist / public / styles / styles.css.min√完成标准差(373ms)
为什么普通的CLI版本工作,而npm脚本版本在尝试查找目录时出错?
我也尝试在sass:watch任务中加入'npm run sass:build'。同样的效果。我可以运行sass:通过npm run sass:build
构建并且可以运行。
解决方法
我可以定义一个bash脚本来运行watch命令,但它可以工作。
sass-watch (没有文件扩展名,unix风格)
watch 'npm run sass:build' ./assets/styles/
现在 sass:watch 工作可以bash ./sass-watch
。
这很好用。所以我可以将它链接到一个更复杂的脚本链中,这样我就可以让我的npm run dev
工作,但我宁愿不必在脚本中包含脚本来处理这种奇怪的用例。看起来我在sass:watch
中写的原本应该起作用......:\
抛弃Windows并安装Ubuntu的另一个原因......?或者,npm是否对环境做了些什么,使得watch命令需要其他东西?
答案 0 :(得分:1)
尝试使用引号括起命令并查看它是否有效:
"sass:watch": "watch \"npm run sass:build\" ./assets/styles/"
解释:
首先,它必须是npm run sass:build,而不是sass:build,因为这就是你运行你定义的npm脚本的方式。
其次,你必须引用命令的原因是watch正在使用minimist从process.argv读取命令,它将第一个参数视为命令,如果你不引用整个命令,它将是npm ,其余的参数都被视为它所监视的目录,这就是为什么你得到错误的文件名错误的原因。
第三,我不确定为什么单引号不起作用,也许这是与Windows和Mingw相关的问题,因为双引号和单引号之间的差异是一个将被评估,另一个将被字面处理在shell中。