在具有多个子目录的大型Javascript项目上使用grunt

在具有多个子目录的大型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

我有一个包含多个子目录的Javascript项目,每个子目录都有自己的项目。我可以只使用一个巨大的Gruntfile,每个项目都有不同的任务,但我更希望在每个子文件夹中都有一个Gruntfile。一个典型的文件结构是这样的

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