我有一个包含多个子目录的Javascript项目,每个子目录都有自己的项目。我可以为每个项目使用一个具有不同任务的大型Gruntfile,但我宁愿在每个子文件夹中都有一个Gruntfile。典型的文件结构是这个
main_folder/
project_1
src
js/
dist/
doc/
Gruntfile.js
package.json
package.json
node_modules/
然后重复每个项目的文件结构
这是我在project_1中的Gruntfile
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']);
};
它的任务比我使用的少,但错误仍然存在。每当我尝试运行grunt时,我都会收到错误消息Local Npm module "grunt-contrib-uglify" not found. Is it installed?
,即使我已经在node_modules中安装了它。
如何指定node_modules的位置,还是必须在每个文件夹中重新安装node_modules?
答案 0 :(得分:3)
如果您更明确地告诉Grunt在哪里找到您的插件,我认为您仍然可以将所有内容保存在同一个地方。例如,这里有一点我的Gruntfiles:
grunt.loadTasks tasks for tasks in grunt.file.expand '../node_modules/grunt-*/tasks'
作为旁注:我面临的选择完全相同,但做出了相反的选择:整个项目的单个Grunt文件,并从每个项目子目录创建一个符号链接。事实证明这是一种非常简单的方法,可以将事物放在一个地方,并且可以解决许多令人困惑的问题,例如你所面临的问题。
答案 1 :(得分:0)
解决此问题的另一个好方法可能是使用subgrunt。它允许您为子项目配置各种目标,并具有选项npmInstall
,其中“确定将为子项目运行npm install(从而安装dev依赖项)。”