如何在 grunt-contrib-jshint 中执行具有不同选项的多个目标
How to execute multiple targets with different options in grunt-contrib-jshint
目标:灵活执行 jshint 以将结果输出到控制台(如果在开发中)或文件(如果是 released/in Jenkins)。
可能吗?我可以将单独的目标添加到我的 jshint 设置中,但我的所有选项都是相同的,除了记者的详细信息。所以最好不要重复这些。我需要从 "all" 进行连接,并使用所有全局选项和被调用目标的特定选项。怎么样?
jshint.js:
module.exports = {
options: {
node: true,
browser: true,
blah: blah...
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
],
dev: {
options: {
reporter: 'checkstyle'
}
}
release: {
options: {
reporter: 'checkstyle',
reporterOutput: 'myfile.xml'
}
}
};
希望这对您有所帮助,这只是您可以改进代码的示例。
安装:grunt-contrib-jshint
Gruntfile.js
//Jshint ===============================
var jshint;
config.jshint = jshint ={};
jshint.dist = {
options: {jshintrc: ".jshintrc"},
files: {all: ["lib/main.js","lib/test.js"]}
};
jshint.dev = {
options: {jshintrc: ".jshintrc.dev"},
files: {all: ["lib/main.js","lib/test.js"]}
};
.jshintrc
{
"strict":true,
"laxcomma":true,
"sub":true
}
.jshintrc.dev
{
"strict":true,
"laxcomma":true,
"sub":true,
"debug":true
}
如果您有两个目标之间相同的选项子集,您可以为该对象创建一个变量并将其值分配给两个目标的 option
键:
var reporterOptions = {
foo: 'red',
bar: 'green',
baz: 'blue'
};
module.exports = {
options: {
node: true,
browser: true,
blah: blah...
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
],
dev: {
options: reporterOptions
}
release: {
options: reporterOptions
}
};
如果您想在一个地方维护您的选项值,但又想有选择地决定将哪些选项应用于哪些目标,您可以使用点表示法引用存储在变量中的值。
var reporterOptions = {
foo: 'red',
bar: 'green',
baz: 'blue'
};
module.exports = {
options: {
node: true,
browser: true,
blah: blah...
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
],
dev: {
options: {
foo: reporterOptions.foo
bar: reporterOptions.bar
}
}
release: {
options: {
foo: reporterOptions.foo
baz: reporterOptions.baz
}
}
};
我最终选择了可变路径,但将其用于文件源,然后覆盖了目标中的必要选项。
var files = [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
];
module.exports = {
options: {
reporter: require('jshint-stylish'),
node: true, ...
},
dev: {
src: files
},
release: {
src: files,
options: {
reporter: 'checkstyle',
reporterOutput: 'myfile.xml',
reporterOutputRelative: false
}
}
}
根据我读过的其他内容,我认为默认选项在目标中不起作用并允许覆盖,我也遇到了文件问题,但这解决了所有问题。
目标:灵活执行 jshint 以将结果输出到控制台(如果在开发中)或文件(如果是 released/in Jenkins)。
可能吗?我可以将单独的目标添加到我的 jshint 设置中,但我的所有选项都是相同的,除了记者的详细信息。所以最好不要重复这些。我需要从 "all" 进行连接,并使用所有全局选项和被调用目标的特定选项。怎么样?
jshint.js:
module.exports = {
options: {
node: true,
browser: true,
blah: blah...
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
],
dev: {
options: {
reporter: 'checkstyle'
}
}
release: {
options: {
reporter: 'checkstyle',
reporterOutput: 'myfile.xml'
}
}
};
希望这对您有所帮助,这只是您可以改进代码的示例。
安装:grunt-contrib-jshint
Gruntfile.js
//Jshint ===============================
var jshint;
config.jshint = jshint ={};
jshint.dist = {
options: {jshintrc: ".jshintrc"},
files: {all: ["lib/main.js","lib/test.js"]}
};
jshint.dev = {
options: {jshintrc: ".jshintrc.dev"},
files: {all: ["lib/main.js","lib/test.js"]}
};
.jshintrc
{
"strict":true,
"laxcomma":true,
"sub":true
}
.jshintrc.dev
{
"strict":true,
"laxcomma":true,
"sub":true,
"debug":true
}
如果您有两个目标之间相同的选项子集,您可以为该对象创建一个变量并将其值分配给两个目标的 option
键:
var reporterOptions = {
foo: 'red',
bar: 'green',
baz: 'blue'
};
module.exports = {
options: {
node: true,
browser: true,
blah: blah...
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
],
dev: {
options: reporterOptions
}
release: {
options: reporterOptions
}
};
如果您想在一个地方维护您的选项值,但又想有选择地决定将哪些选项应用于哪些目标,您可以使用点表示法引用存储在变量中的值。
var reporterOptions = {
foo: 'red',
bar: 'green',
baz: 'blue'
};
module.exports = {
options: {
node: true,
browser: true,
blah: blah...
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
],
dev: {
options: {
foo: reporterOptions.foo
bar: reporterOptions.bar
}
}
release: {
options: {
foo: reporterOptions.foo
baz: reporterOptions.baz
}
}
};
我最终选择了可变路径,但将其用于文件源,然后覆盖了目标中的必要选项。
var files = [
'Gruntfile.js',
'<%= yeoman.app %>/modules/**/*.js',
'<%= yeoman.app %>/*.js'
];
module.exports = {
options: {
reporter: require('jshint-stylish'),
node: true, ...
},
dev: {
src: files
},
release: {
src: files,
options: {
reporter: 'checkstyle',
reporterOutput: 'myfile.xml',
reporterOutputRelative: false
}
}
}
根据我读过的其他内容,我认为默认选项在目标中不起作用并允许覆盖,我也遇到了文件问题,但这解决了所有问题。