您的代码存在一些问题。第一的:
common_libs_js : this.common_libs + "lib/general/static/js/"
不幸this.common_libs
的是未定义(this
不指向您认为的位置),因此 common_libs_js 最终成为'undefinedlib/general/static/js/'
,这是行不通的。
第二个问题是,在同一行上,您正在连接路径,但第一个路径(来自属性文件)似乎没有以斜杠结尾,'/home/user/projects/commonlib/general/static/js/'
如果不是上一个问题,它会变成。
第三,你会在你的 dest 路径中得到一大堆文件夹。当使用扩展选项时,Grunt 使用 src 属性中给出的路径来创建文件夹结构。如果要/home/user/projects/common/lib/general/static/js/foo.js
复制到lib/foo.js
,则应将cwd
选项设置为paths.common_libs_js
,并将 src 设置为'*.js'
(或'**/*.js'
任何级别的匹配项)。
人们通常将配置属性嵌入到 Grunt 的配置中,然后使用模板字符串来访问它们。编写任务的一种非常常见的方式是这样的(有一些更改,根据需要进行调整):
module.exports = function(grunt) {
grunt.initConfig({
properties: grunt.file.readJSON('properties.json'),
copy: {
main: {
expand: true,
cwd: '<%= properties.common_libs %>/lib/general/static/js',
src: '**/*.js',
dest: 'lib'
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
或者,如果您希望文件也以lib/general/static/js/
目标路径中的 ' ' 结尾:
module.exports = function(grunt) {
grunt.initConfig({
properties: grunt.file.readJSON('properties.json'),
copy: {
main: {
expand: true,
cwd: '<%= properties.common_libs %>',
src: 'lib/general/static/js/**/*.js',
dest: '.' // because src includes 'lib'
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
如果您不确定 Grunt 如何查看您的文件,请运行它,grunt -v
它会告诉您。
您可能还想考虑将 git 子模块用于非 Grunt 解决方案。
对于特定于任务的常量:您可以为此使用任务(或目标)的options
哈希,并使用模板字符串访问它:
module.exports = function(grunt) {
grunt.initConfig({
properties: grunt.file.readJSON('properties.json'),
copy: {
options: {
foo: 'lib'
},
main: {
options: {
bar: '**/*.js'
},
expand: true,
cwd: '<%= properties.common_libs %>/<%= copy.options.foo %>/general/static/js',
src: '<%= copy.options.main.bar %>',
dest: 'lib'
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
但是,除了实际选项之外,很少有人这样做。可能会发生与实物期权的冲突。你也可以直接使用目标命名空间,直接在main
. 但同样,有一些属性名称可能会发生冲突。
如果你想覆盖属性(例如发布版本),你可以这样做:
module.exports = function(grunt) {
grunt.registerTask('release', function() {
grunt.config.set('properties.common_libs', '/usr/lib/shared');
});
grunt.initConfig({
properties: grunt.file.readJSON('properties.json'),
copy: {
main: {
expand: true,
cwd: '<%= properties.common_libs %>/lib/general/static/js',
src: '**/*.js',
dest: 'lib'
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
然后你会用grunt release copy
.
编辑
根据您更新的问题,该文件似乎对您没有properties.json
多大用处。为什么不在你的 Gruntfile 中指定属性呢?
module.exports = function(grunt) {
grunt.initConfig({
properties: {
base_dir: '../common',
base_js_dir: '<%= properties.base_dir %>/lib/general/static/js',
base_css_dir: '<%= properties.base_dir %>/lib/general/static/css'
},
copy: {
main: {
expand: true,
cwd: '<%= properties.base_js_dir %>',
src: '**/*.js',
dest: 'lib'
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
};
如果需要,您也可以将文件与此一起使用。甚至将这些属性(带有模板字符串)放在properties.json
文件中。最后只是让 Grunt 看到一个带有模板字符串的对象。以某种方式提供它取决于您。