Gruntjs Grunt/Yeoman多个Grunfile.js文件

Gruntjs Grunt/Yeoman多个Grunfile.js文件,gruntjs,yeoman,Gruntjs,Yeoman,我的目标是能够将我的项目构建到两个独立的构建文件夹中,每个文件夹都有自己的Grunt任务 我注意到grunt cli有--gruntfile选项,允许您指定要使用的另一个gruntfile。到目前为止,我有一个Gruntfile.js工作得很好(约曼的库存)。另外,我旁边还有另一个gruntile2.js grunfile.js var yeomanConfig = { app: 'app', dist: '../www_browser' }; var yeomanConfig

我的目标是能够将我的项目构建到两个独立的构建文件夹中,每个文件夹都有自己的Grunt任务

我注意到
grunt cli
--gruntfile
选项,允许您指定要使用的另一个gruntfile。到目前为止,我有一个
Gruntfile.js
工作得很好(约曼的库存)。另外,我旁边还有另一个
gruntile2.js

grunfile.js

var yeomanConfig = {
    app: 'app',
    dist: '../www_browser'
};
var yeomanConfig = {
    app: 'app',
    dist: '../www'
};
grunfile2.js

var yeomanConfig = {
    app: 'app',
    dist: '../www_browser'
};
var yeomanConfig = {
    app: 'app',
    dist: '../www'
};
grunt build
旨在运行Gruntfile.js,而且运行得非常完美

grunt build--gruntile gruntile2.js
本应运行
gruntile2.js
,但运行时会遇到一些问题。(应该构建到
。/www
文件夹,而不是
。/www\u浏览器
文件夹)

除了grunt usemingunt contrib htmlmin之外,对于几乎所有任务,--grunfile指令都会构建到适当的文件夹中。我之所以知道这一点,是因为这里控制台的输出:

Running "usemin:css" (usemin) task
Processing as CSS - ../www_browser/styles/22f60055.main.css

Running "concurrent:dist" (concurrent) task

Running "htmlmin:dist" (htmlmin) task
File ../www_browser/404.html created.
File ../www_browser/index.html created.
您会注意到控制台输出中的。/www\u浏览器。其他每项任务都在预期的。/www文件夹中运行

这是usemin缓存吗?咕噜缓存的事?或者某些任务只是从默认的Gruntfile.js运行,而不考虑
--Gruntfile Gruntfile2.js
指令

现在,我已经放弃了从一个Gruntfile执行多个目标的尝试。Yeoman的Grunfile.js中有太多的依赖项还不支持多个构建目标,我花了12个小时来解决这个问题

版本信息

$: grunt --version
grunt-cli v0.1.9
grunt v0.4.1

$: npm --version
1.2.25

$: yo --version
1.0.3
package.json

{
  "name": "myapp",
  "version": "0.0.0",
  "dependencies": {},
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-copy": "~0.4.1",
    "grunt-contrib-concat": "~0.1.3",
    "grunt-contrib-coffee": "~0.6.5",
    "grunt-contrib-uglify": "~0.2.0",
    "grunt-contrib-compass": "~0.2.0",
    "grunt-contrib-jshint": "~0.4.1",
    "grunt-contrib-cssmin": "~0.6.0",
    "grunt-contrib-connect": "~0.2.0",
    "grunt-contrib-clean": "~0.4.0",
    "grunt-contrib-htmlmin": "~0.1.3",
    "grunt-bower-requirejs": "~0.4.1",
    "grunt-contrib-requirejs": "~0.4.0",
    "grunt-contrib-imagemin": "~0.1.3",
    "grunt-contrib-watch": "~0.4.0",
    "grunt-rev": "~0.1.0",
    "grunt-usemin": "~0.1.10",
    "grunt-mocha": "~0.3.0",
    "grunt-open": "~0.2.0",
    "grunt-svgmin": "~0.1.0",
    "grunt-concurrent": "~0.1.0",
    "matchdep": "~0.1.1",
    "connect-livereload": "~0.2.0"
  },
  "engines": {
    "node": ">=0.8.0"
  }
}

看起来您使用的是grunt concurrent的旧版本,它似乎没有将grunt标志传递给子进程

请看这里:

在插件的当前版本上,将传递标志,请参见此处:

因此,我建议更新您的grunt并发版本:


npm安装grunt-concurrent@latest--save dev

它不应该读取默认的Gruntfile。作为一个实验,在运行
grunt build--Gruntfile Gruntfile2.js
之前,您是否尝试过删除默认的Gruntfile.js或将其重命名为随机文件?这是一个很好的建议。这个会把我带进另一个兔子洞。现在获取并发:dist任务的错误警告:找不到有效的Gruntfile。有关如何配置grunt的详细信息,请参阅《入门指南》:致命错误:找不到Gruntfile。本文对此进行了说明:尽管在恢复到grunt cli v0.1.8后,我收到了相同的错误。更新:grunt并发任务似乎有问题。有关进一步的通信,请参阅。一旦我解决了这个问题,我会回来寻求解决方案。看起来您正在取得进展,尽管我怀疑问题出在并发任务上,因为我自己刚刚尝试过,并且它在自定义Grunfile中的效果与预期一样。你能发布你的package.json文件吗?