将参数从脚本传递到 gulp 任务
Pass argument from script to gulp task
我有 package.json
个具有以下结构的脚本:
"scripts": {
"watch:build": "tsc --watch",
"watch:server": "nodemon ./src/app.js --watch 'app'",
"build": "tsc && gulp do_something",
"start": "npm-run-all clean build --parallel watch:build",
"watch:server --print-label"
}
我想以 npm run start with_argument
的身份启动应用程序
并将其传递给 build
脚本,以根据该参数在 gulp 任务中执行操作。
我看了很多教程和方法文章,但没有结果。有可能以某种方式将参数从一个脚本传递到另一个脚本(启动 gulp 任务)。
提前致谢!
npm-run-all
通过使用 npm-scripts 中的占位符提供了自己的自定义机制来处理参数,如其文档的 Argument Placeholders 部分所述 here.
npm-脚本:
鉴于您当前名为 start
的 npm 脚本,您需要按如下方式重新定义它:
"scripts": {
...
"start": "npm-run-all clean \"build -- {@}\" --parallel watch:build --"
...
}
备注:
-- {@}
必须在build
之后加上。1
build -- {@}
必须用转义双引号括起来 \"...\"
--
也必须在最后一次脚本调用之后添加,即:watch:build
gulpfile.js
要获取通过 gulpfile.js 中的 CLI 传递的参数,您需要使用节点 process.argv
为了演示的目的假设我们的gulpfile.js如下:
var gulp = require('gulp');
var args = process.argv.splice(3, process.argv.length - 3);
gulp.task('doSomething', function() {
// For testing purposes...
if (args.indexOf('--foo') > -1) {
console.log('--foo was passed via the CLI.')
}
if (args.indexOf('--quux') > -1) {
console.log('--quux was passed via the CLI.')
}
});
备注:
节点 process.argv
中的前三项是:
- 可执行文件的路径 运行ning JavaScript 文件。
- 正在执行的JavaScript文件的路径。
- gulp任务的名称,即
doSomething
但是,我们只对数组中从第四项开始的元素感兴趣 - 因为这些将是通过 CLI 传递的参数。该行内容为:
var args = process.argv.splice(3, process.argv.length - 3);
创建一个 args
变量并分配一个数组,其中包含通过 CLI 传递的每个参数,即我们使用数组 splice()
方法省略了上面第 1 点中提到的前三个项目。
运行 你的 start
脚本:
您通过 CLI 调用启动脚本,如下所示:
$ npm start -- --foo --quux
注意 在提供您自己的论点之前,您必须提供 npm start
之前的 --
。
输出:
使用上面设计的 gulpfile.js
,结合您在 package.json 中定义的当前脚本,当然还有必要的对您的 start
脚本所做的更改。当你 运行:
$ npm start -- --foo --quux
您将看到以下内容打印到控制台:
--foo was passed via the CLI.
--quux was passed via the CLI.
运行:
$ npm start -- --quux
您将在控制台上看到以下内容:
--quux was passed via the CLI.
当然,运行宁:
$ npm start
不打印 gulpfile.js.
中定义的任何消息
脚注:
1 -- {@}
如果您只想传递一个参数,可以用 -- {1}
代替。但是,-- {@}
处理多个参数,因此也可以将它用于一个参数。
我有 package.json
个具有以下结构的脚本:
"scripts": {
"watch:build": "tsc --watch",
"watch:server": "nodemon ./src/app.js --watch 'app'",
"build": "tsc && gulp do_something",
"start": "npm-run-all clean build --parallel watch:build",
"watch:server --print-label"
}
我想以 npm run start with_argument
的身份启动应用程序
并将其传递给 build
脚本,以根据该参数在 gulp 任务中执行操作。
我看了很多教程和方法文章,但没有结果。有可能以某种方式将参数从一个脚本传递到另一个脚本(启动 gulp 任务)。
提前致谢!
npm-run-all
通过使用 npm-scripts 中的占位符提供了自己的自定义机制来处理参数,如其文档的 Argument Placeholders 部分所述 here.
npm-脚本:
鉴于您当前名为 start
的 npm 脚本,您需要按如下方式重新定义它:
"scripts": {
...
"start": "npm-run-all clean \"build -- {@}\" --parallel watch:build --"
...
}
备注:
-- {@}
必须在build
之后加上。1build -- {@}
必须用转义双引号括起来\"...\"
--
也必须在最后一次脚本调用之后添加,即:watch:build
gulpfile.js
要获取通过 gulpfile.js 中的 CLI 传递的参数,您需要使用节点 process.argv
为了演示的目的假设我们的gulpfile.js如下:
var gulp = require('gulp');
var args = process.argv.splice(3, process.argv.length - 3);
gulp.task('doSomething', function() {
// For testing purposes...
if (args.indexOf('--foo') > -1) {
console.log('--foo was passed via the CLI.')
}
if (args.indexOf('--quux') > -1) {
console.log('--quux was passed via the CLI.')
}
});
备注:
节点
process.argv
中的前三项是:- 可执行文件的路径 运行ning JavaScript 文件。
- 正在执行的JavaScript文件的路径。
- gulp任务的名称,即
doSomething
但是,我们只对数组中从第四项开始的元素感兴趣 - 因为这些将是通过 CLI 传递的参数。该行内容为:
var args = process.argv.splice(3, process.argv.length - 3);
创建一个
args
变量并分配一个数组,其中包含通过 CLI 传递的每个参数,即我们使用数组splice()
方法省略了上面第 1 点中提到的前三个项目。
运行 你的 start
脚本:
您通过 CLI 调用启动脚本,如下所示:
$ npm start -- --foo --quux
注意 在提供您自己的论点之前,您必须提供 npm start
之前的 --
。
输出:
使用上面设计的
gulpfile.js
,结合您在 package.json 中定义的当前脚本,当然还有必要的对您的start
脚本所做的更改。当你 运行:$ npm start -- --foo --quux
您将看到以下内容打印到控制台:
--foo was passed via the CLI.
--quux was passed via the CLI.
运行:
$ npm start -- --quux
您将在控制台上看到以下内容:
--quux was passed via the CLI.
当然,运行宁:
$ npm start
不打印 gulpfile.js.
中定义的任何消息
脚注:
1 -- {@}
如果您只想传递一个参数,可以用 -- {1}
代替。但是,-- {@}
处理多个参数,因此也可以将它用于一个参数。