在具有多个子目录的大型Javascript项目上使用grunt
我有一个包含多个子目录的Javascript项目,每个子目录都有自己的项目。我可以只使用一个巨大的Gruntfile,每个项目都有不同的任务,但我更希望在每个子文件夹中都有一个Gruntfile。一个典型的文件结构是这样的在具有多个子目录的大型Javascript项目上使用grunt,javascript,gruntjs,organization,Javascript,Gruntjs,Organization,我有一个包含多个子目录的Javascript项目,每个子目录都有自己的项目。我可以只使用一个巨大的Gruntfile,每个项目都有不同的任务,但我更希望在每个子文件夹中都有一个Gruntfile。一个典型的文件结构是这样的 main_folder/ project_1 src js/ dist/ doc/ Gruntfile.js package.json package.js
main_folder/
project_1
src
js/
dist/
doc/
Gruntfile.js
package.json
package.json
node_modules/
然后为每个项目重复文件结构
这是我在项目1中的Grunfile
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/<%= pkg.name %>.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
});
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['uglify']);
};
module.exports=函数(grunt){
//项目配置。
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
丑陋的:{
选项:{
横幅:'/*!*/\n'
},
建造:{
src:'src/.js',
dest:'build/.min.js'
}
}
});
//加载提供“丑”任务的插件。
grunt.loadNpmTasks(“grunt-contrib-uglify”);
registerTask('default',['uglify']);
};
它的任务比我将使用的要少,但错误仍然存在。每当我尝试运行grunt时,都会收到错误消息localnpm模块“grunt contrib uglify”未找到。它是否已安装?
,即使我已将其安装在node_模块中
如何指定node_模块的位置,或者我必须在每个文件夹中重新安装node_模块?如果您更明确地告诉Grunt在哪里可以找到插件,我认为您仍然可以将所有内容保留在同一位置。例如,下面是我的一个Gruntfiles中的一点:
grunt.loadTasks tasks for tasks in grunt.file.expand '../node_modules/grunt-*/tasks'
作为旁注:我面临与您完全相同的选择,但做出了相反的选择:为整个项目创建一个Gruntfile,并从每个项目子目录创建一个指向它的符号链接。事实证明,这是一种非常简单的方法,可以将事情集中在一个地方,并避免了许多像您所面临的问题一样令人困惑的问题。另一个解决这一问题的好方法可能是使用。它允许您为子项目配置各种目标,并具有选项
npmInstall
,该选项“确定是否将为子项目运行npm安装(从而安装开发依赖项)。好的,但是我必须有数百个几乎相同的任务,只是名称和文件夹不同而已。有没有办法,我可以只用一两个任务?我应该澄清一下。。。我为每个项目的GrunFile添加了一个符号链接,这样它的工作目录就位于每个项目自己的子目录中,但仍然只有一个GrunFile。我看到您的子目录中有另一个package.json
,但没有node\u模块
目录。也许您可以将grunt contrib uglify
包含在子目录的package.json devdeependencies
中,然后从子目录中运行npm install
?