首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将参数从命令行传递给npm和咕噜?

如何将参数从命令行传递给npm和咕噜?
EN

Stack Overflow用户
提问于 2020-11-01 19:59:43
回答 1查看 338关注 0票数 1

我试图在我的工作流程中自动化一些过程,为了做到这一点,我需要使用一些变量来控制我正在工作的环境。

首先是一个简单的示例,它是一个命令,用于创建一个新文件夹并复制一些样板文件。为了做到这一点,我使用了npm和咕噜,就像这样:

package.json

代码语言:javascript
运行
复制
"scripts": {
  "new": "grunt new --target
},

grunt.js

代码语言:javascript
运行
复制
module.exports = function (grunt) {
  const target = grunt.option('target');
  console.log('Target: ', target);

  grunt.config.set('copy', {
    new: {
      files: [{
        expand: true,
        cwd: 'assets/zip',
        src: '*.zip',
        dest: 'projects/',
      }]
    },
  });
}

我试着这样叫:

代码语言:javascript
运行
复制
npm run new --target:my-folder-name

这只是一个简单的例子,我正在运行其他脚本,如解压缩文件,重命名,复制,进程scss等.

我期望的是将文件复制到一个名为my-folder-name的文件夹中,但它没有发生。控制台正在打印true,而不是文件夹名。

我需要做什么才能将参数传递给脚本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 15:31:02

假设我们设计的项目目录结构如下:

代码语言:javascript
运行
复制
.
├── Gruntfile.js
├── assets
│   └── zip
│       ├── file1.zip
│       ├── file2.zip
│       └── file3.zip
├── node_modules
│   └── ...
└── package.json

然后考虑以下利用Gruntfile.js的咕噜-回音-复写示例

Gruntfile.js

代码语言:javascript
运行
复制
module.exports = function(grunt) {

  const target = grunt.option('target') || 'foobar'; // default dir is `foobar`.

  grunt.loadNpmTasks('grunt-contrib-copy');


  grunt.initConfig({
    copy: {
      zips: {
        files: [{
          expand: true,
          cwd: 'assets/zip',
          src: '*.zip',
          dest: 'projects/' + target
        }]
      }
    }
  });

  grunt.registerTask('copy-zips', [ 'copy:zips' ]);

};

通过grunt命令输出。

  1. 如果我们将cd转到项目目录并运行以下grunt命令: 咕噜拷贝拉链 以下文件夹(projects/foobar)是在项目目录的根目录中创建的。 结果示例A 。├──...└──项目└──foobar├──file1.zip├──file2.zip└──file3.zip 备注默认的foobar文件夹已经创建,其中包含*.zip文件的副本。该文件夹名为foobar,因为我们没有通过命令行提供参数。
  2. 接下来,如果我们再次cd到项目目录并运行以下grunt命令: -目标=我的文件夹-名称 以下文件夹(projects/my-folder-name)是在项目目录的根目录中创建的。 结果示例B 。├──...└──项目└──my-文件夹名为├──file1.zip├──file2.zip└──文件3.zip Note这次已经创建了包含*.zip文件副本的my-folder-name文件夹,因为我们提供了--target=my-folder-name参数/选项。

通过npm命令输出。

首先,让我们将项目scripts部分配置为package.json,如下所示:

包,json

代码语言:javascript
运行
复制
{
  ...
  "scripts": {
    "copy-zips": "grunt copy-zips"
  },
  ...
}
  1. 如果我们将cd转到项目目录并运行以下npm命令: npm运行复制-压缩 我们得出的结果与前面的结果示例A部分中显示的结果相同。
  2. 接下来,如果我们再次光盘到项目目录并运行以下npm命令: npm运行复制-压缩-目标=我的文件夹名称 我们得出的结果与前面的结果示例B部分中显示的结果相同。 注:npm run copy-zips和参数--target=my-folder-name之间的附加--选项。 国家预防机制文档--选项描述如下: 从npm@2.0.0开始,您可以在执行脚本时使用自定义参数。特殊选项--getopt用来分隔选项的末尾。npm将在--之后将所有参数直接传递给脚本:

补充说明:

如果不希望在my-folder-name文件夹中创建projects文件夹,而是希望在项目目录的根目录中创建my-folder-name文件夹,则可以按照以下方式在copy任务中重新定义dest属性:

Gruntfile.js

代码语言:javascript
运行
复制
  // ...

  grunt.initConfig({
    copy: {
      zips: {
        files: [{
          expand: true,
          cwd: 'assets/zip',
          src: '*.zip',
          dest: target // <-----
        }]
      }
    }
  });

  // ...

运行相同的命令:

代码语言:javascript
运行
复制
npm run copy-zips -- --target=my-folder-name

得到以下结果:

代码语言:javascript
运行
复制
.
├── ...
└── my-folder-name
    ├── file1.zip
    ├── file2.zip
    └── file3.zip  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64636387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档