将参数从脚本传递给 gulp 任务

Posted

技术标签:

【中文标题】将参数从脚本传递给 gulp 任务【英文标题】:Pass argument from script to gulp task 【发布时间】:2019-03-10 16:30:52 【问题描述】:

我有 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 任务)。

提前致谢!

【问题讨论】:

【参考方案1】:

npm-run-all 提供了自己的自定义机制,通过在 npm 脚本中使用占位符来处理参数,如 here 的文档的 Argument Placeholders 部分所述。

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中的前三项是:

    运行 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

注意您必须先提供--,然后再提供您自己的参数。


输出:

使用上面设计的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 如果您只打算传递一个参数。但是,-- @ 处理多个参数,因此也可以将其用于一个参数。


【讨论】:

以上是关于将参数从脚本传递给 gulp 任务的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数“请求”从脚本传递给视图的函数? [关闭]

将参数从 shell 脚本传递到 hive 脚本

试图了解如何将参数从 gradle 传递到我的 shell 脚本?

从 C++ 将字节数组传递给 lua 脚本方法

将 $@ 传递给 shell 脚本中的函数

将参数从Javascript传递到烧瓶python脚本[重复]