如何使用npm脚本创建多个输出文件?

如何使用npm脚本创建多个输出文件?,npm,npm-scripts,Npm,Npm Scripts,我正在尝试npm脚本而不是吞咽。我遇到了一个问题,我是否可以使用一个npm脚本,例如,使用节点sass编译scss文件以用于开发和生产,或者我是否应该使用多个脚本来实现此目的: 这是我的包。json: 。。。 “脚本”:{ “scss”:“节点sass app/src/styles/main.scss——输出app/.tmp/styles/”, “autoprefixer”:“postsss-u autoprefixer-r app/.tpm/styles/*”, “scss:prod”:“节点

我正在尝试npm脚本而不是吞咽。我遇到了一个问题,我是否可以使用一个npm脚本,例如,使用节点sass编译scss文件以用于开发和生产,或者我是否应该使用多个脚本来实现此目的:

这是我的包。json

。。。
“脚本”:{
“scss”:“节点sass app/src/styles/main.scss——输出app/.tmp/styles/”,
“autoprefixer”:“postsss-u autoprefixer-r app/.tpm/styles/*”,
“scss:prod”:“节点sass-app/src/styles/main.scss——输出app/dist/styles/”,
“autoprefixer:prod”:“postsss-u autoprefixer-r app/dist/styles/*”,
“cssnano”:“postsss-u cssnano-r app/dist/styles/main.css”,
“生成:样式”:“npm运行scss:prod&&npm运行自动刷新器:prod&&npm运行cssnano”
},

是否可以将我的scss任务拆分为单个脚本,并为dev和prod文件夹提供多个输出?

简短回答:最好为此使用多个脚本


例如:

。。。
“scss:dev”:“节点sass-app/src/styles/main.scss——输出app/dev/styles/”
“scss:prod”:“节点sass-app/src/styles/main.scss——输出app/dist/styles/”
...
(注意,唯一的区别在于输出/目标路径)

然后考虑将所有样式相关的任务分组为<代码> DEV或<代码> PROD/COD>。例如:

。。。
“构建样式:prod”:“npm运行SCS:prod&&…”
“构建样式:开发”:“npm运行SCS:dev&&…”
...
您还可以为
dev
设置一个脚本,为
build
设置一个脚本,以完成所有任务,即除了处理样式相关任务之外的任务。例如:

。。。
“dev”:“构建样式:dev&&…”
“构建”:“构建样式:产品和…”
...
然后,您只需根据需要通过CLI运行
$npm run dev
$npm run build
,即可执行所有任务

注意:您会发现,有时脚本名称不需要用
:prod
:dev
后缀来区分,因为一个脚本可以用于任何用途(既可以是
dev
也可以是
build
)。然而,通常当输出/目的地路径不同时,考虑前缀与<代码>:DEV或<代码>:PROD必要时。


为什么?

是的,不可否认,它相当冗长,并不特别,但它更易于人类阅读和维护。IMO“更容易阅读”和更好的可维护性每次都获胜

此外,您可能会发现,
dev
build
的需求之间不仅存在输出/目标路径的差异。例如,出于
dev
目的,您可能希望名为
“scss:dev”
的任务也包含源映射,以便于调试-但您并不特别希望源映射包含在最终生成/分发代码中


但是,我必须有一个脚本,否则世界将停止旋转:)

是否可以将我的scss任务拆分为具有多个dev和prod文件夹输出的单个脚本

是的,可以有一个脚本。给定OP中名为
“scss”
的脚本,您可以使用如下链接(
&&
):

。。。
“scss”:“node sass app/src/styles/main.scss--output app/.tmp/styles/&&node sass app/src/styles/main.scss--output app/dist/styles/”
...
或者,使用附加的项目依赖项:

。。。
“scss”:“节点sass-app/src/styles/main.scss——输出app/.tmp/styles/&&catw-app/.tmp/styles/main.css>app/dist/styles/main.css”
...

这将编译
main.scss
,输出初始
main.css
。然后,我们使用
cat
main.css并将副本输出到
dist
文件夹。(注意:这是使用而不是因为
cat
不跨平台工作)

简短回答:最好使用多个脚本


例如:

。。。
“scss:dev”:“节点sass-app/src/styles/main.scss——输出app/dev/styles/”
“scss:prod”:“节点sass-app/src/styles/main.scss——输出app/dist/styles/”
...
(注意,唯一的区别在于输出/目标路径)

然后考虑将所有样式相关的任务分组为<代码> DEV或<代码> PROD/COD>。例如:

。。。
“构建样式:prod”:“npm运行SCS:prod&&…”
“构建样式:开发”:“npm运行SCS:dev&&…”
...
您还可以为
dev
设置一个脚本,为
build
设置一个脚本,以完成所有任务,即除了处理样式相关任务之外的任务。例如:

。。。
“dev”:“构建样式:dev&&…”
“构建”:“构建样式:产品和…”
...
然后,您只需根据需要通过CLI运行
$npm run dev
$npm run build
,即可执行所有任务

注意:您会发现,有时脚本名称不需要用
:prod
:dev
后缀来区分,因为一个脚本可以用于任何用途(既可以是
dev
也可以是
build
)。然而,通常当输出/目的地路径不同时,考虑前缀与<代码>:DEV或<代码>:PROD必要时。


为什么?

是的,不可否认,它相当冗长,并不特别,但它更易于人类阅读和维护。IMO“更容易阅读”和更好的可维护性每次都获胜

此外,您可能会发现,
dev
build
的需求之间不仅存在输出/目标路径的差异。例如,出于
dev
目的,您可能希望名为
“scss:dev”
的任务也包含源代码映射,以便于调试,但您并不特别需要