简短回答:最好为此目的使用多个脚本
例如:
...
"scss:dev": "node-sass app/src/styles/main.scss --output app/dev/styles/"
"scss:prod": "node-sass app/src/styles/main.scss --output app/dist/styles/"
...
(注意唯一的区别是输出/目标路径)
然后考虑将所有与样式相关的任务分组为dev
或prod
。例如:
...
"build-styles:prod": "npm run scss:prod && ..."
"build-styles:dev": "npm run scss:dev && ..."
...
您还可以设置一个脚本,一个脚本来dev
完成build
所有任务,即除了处理与样式相关的任务之外的那些。例如:
...
"dev": "build-styles:dev && ..."
"build": "build-styles:prod && ..."
...
然后,您可以根据需要简单地运行CLI$ npm run dev
或$ npm run build
通过 CLI 运行,并执行所有任务。
注意:您会发现有时脚本名称不需要用 a:prod
或:dev
后缀来区分,因为一个脚本可以用于任一目的(两者dev
或build
)。但是,通常当输出/目标路径不同时,请考虑在必要时:dev
或:prod
为什么 ?
是的,诚然,它相当冗长且不是特别DRY,但人类更容易阅读和维护。IMO “更容易阅读”和更好的可维护性每次都获胜。
此外,您可能会发现,有时不仅输出/目标路径在 和 的要求之间存在dev
差异build
。例如,出于某种dev
目的,您可能希望名为的任务"scss:dev"
还包含 sourceMaps选项以便于调试 - 但您并不特别希望最终构建/dist 代码中包含源映射。
但是,我必须有一个剧本,否则世界会停止旋转 :)
是否可以将我的 scss 任务拆分为具有 dev 和 prod 文件夹的多个输出的单个脚本?
是的,可以有一个脚本。鉴于"scss"
您的 OP 中命名的脚本,您可以&&
像这样使用链接 ():
...
"scss": "node-sass app/src/styles/main.scss --output app/.tmp/styles/ && node-sass app/src/styles/main.scss --output app/dist/styles/"
...
或者,使用额外的项目依赖项:
...
"scss": "node-sass app/src/styles/main.scss --output app/.tmp/styles/ && catw app/.tmp/styles/main.css > app/dist/styles/main.css"
...
这会编译main.scss
输出初始的main.css
. 然后我们将cat
副本main.css
输出到该dist
文件夹。(注意:这是使用catw而不是cat因为cat
不能跨平台工作)