如何将参数从命令行传递到npm和grunt?

如何将参数从命令行传递到npm和grunt?,npm,gruntjs,Npm,Gruntjs,我正在尝试自动化我的工作流程中的一些过程,为了做到这一点,我需要使用一些变量来控制我正在工作的环境 我将从一个简单的示例开始,这是一个创建新文件夹并复制一些样板文件的命令。为此,我使用了npm和grunt,如下所示: npm run new --target:my-folder-name package.json “脚本”:{ “新”:“咕噜新——目标” }, grunt.js module.exports=函数(grunt){ const target=grunt.option('targ

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

我将从一个简单的示例开始,这是一个创建新文件夹并复制一些样板文件的命令。为此,我使用了npm和grunt,如下所示:

npm run new --target:my-folder-name
package.json

“脚本”:{
“新”:“咕噜新——目标”
},
grunt.js

module.exports=函数(grunt){
const target=grunt.option('target');
log('Target:',Target);
grunt.config.set('copy'{
新的:{
档案:[{
是的,
cwd:“资产/邮政编码”,
src:“*.zip”,
dest:'项目/',
}]
},
});
}
我试着这样称呼它:

npm run new --target:my-folder-name
这只是一个简单的例子,我正在运行其他脚本,如解压缩文件、重命名、复制、处理SCS等

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


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

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

。
├── Grunfile.js
├── 资产
│   └── 拉链
│       ├── file1.zip
│       ├── file2.zip
│       └── file3.zip
├── 节点单元
│   └── ...
└── package.json

然后考虑下面的GruntFiel.js示例:使用:

grunfile.js

module.exports=函数(grunt){
const target=grunt.option('target')| |'foobar';//默认目录为'foobar'。
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
副本:{
拉链:{
档案:[{
是的,
cwd:“资产/邮政编码”,
src:“*.zip”,
目标:“项目/”+目标
}]
}
}
});
grunt.registerTask('copy-zips',['copy:zips']);
};
通过
grunt
命令的输出。
  • 如果我们
    cd
    到项目目录并运行以下
    grunt
    命令:

    grunt copy-zips
    
    npm run copy-zips
    
    在项目目录的根目录中创建以下文件夹(
    projects/foobar

    结果示例A

    。
    ├── ...
    └── 项目
    └── 福巴
    ├── file1.zip
    ├── file2.zip
    └── file3.zip
    
    注意已创建默认的
    foobar
    文件夹,其中包含
    *.zip
    文件的副本。该文件夹名为
    foobar
    ,因为我们没有通过命令行提供参数

  • 接下来,如果我们再次
    cd
    到项目目录并运行以下grunt命令:

    grunt copy-zips --target=my-folder-name
    
    在项目目录的根目录中创建以下文件夹(
    projects/my folder name

    结果示例B

    。
    ├── ...
    └── 项目
    └── 我的文件夹名
    ├── file1.zip
    ├── file2.zip
    └── file3.zip
    
    注意这次创建的
    我的文件夹名
    文件夹包含
    *.zip
    文件的副本,因为我们提供了
    --target=my folder name
    参数/选项

  • 通过
    npm
    命令的输出。 首先,让我们在projects package.json中配置
    脚本
    部分,如下所示:

    包,json

    {
    ...
    “脚本”:{
    “复制拉链”:“grunt复制拉链”
    },
    ...
    }
    
  • 如果我们
    cd
    到项目目录并运行以下
    npm
    命令:

    grunt copy-zips
    
    npm run copy-zips
    
    我们得出的结果与前面提到的结果示例A部分所示的结果相同

  • 接下来,如果我们再次cd到项目目录并运行以下
    npm
    命令:

    grunt copy-zips
    
    npm run copy-zips
    
    npm运行复制拉链--target=我的文件夹名
    
    我们得到的结果与前面提到的结果示例B部分所示的结果相同

    注意:npm run copy zips
  • 和参数
    --target=my folder name
    之间的附加
    --
    选项

    npm将
    --
    选项描述如下:

    截至npm@2.0.0,您可以在执行脚本时使用自定义参数。的特殊选项
    -->
    用于分隔选项的结尾。npm将把
    -->
    之后的所有参数直接传递给您的脚本:


    补充说明: 如果您不想在
    projects
    文件夹中创建
    my folder name
    文件夹,而是想在项目目录的根目录中创建
    my folder name
    文件夹,则可以在
    copy
    任务中重新定义
    dest
    属性,如下所示:

    grunfile.js

    /。。。
    grunt.initConfig({
    副本:{
    拉链:{
    档案:[{
    是的,
    cwd:“资产/邮政编码”,
    src:“*.zip”,
    目的地:目标//