【问题标题】:Grunt/Yeoman Multiple Gruntfile.js FilesGrunt/Yeoman 多个 Gruntfile.js 文件
【发布时间】:2013-08-27 14:56:30
【问题描述】:

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

我注意到grunt-cli 有--gruntfile 选项,它允许您指定另一个要使用的Gruntfile。到目前为止,我有一个 Gruntfile.js 工作正常(接近 Yeoman 的库存)。另外,我旁边还有另一个Gruntfile2.js。

Gruntfile.js

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

Gruntfile2.js

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

grunt build 旨在运行 Gruntfile.js,并且完美运行。

grunt build --gruntfile Gruntfile2.js 旨在运行Gruntfile2.js,但这样做时会遇到一些问题。 (应该构建到../www 文件夹而不是../www_browser 文件夹)

除了 grunt-usemin 和 gunt-contrib-htmlmin 之外,几乎所有任务的 --gruntfile 指令都会构建到正确的文件夹中。我知道这一点是因为这里的控制台输出:

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_browser。所有其他任务都在预期的 ../www 文件夹中运行。

这是一个usemin缓存吗?咕噜缓存的东西?或者,不管--gruntfile Gruntfile2.js 指令如何,一些任务只是从默认的 Gruntfile.js 运行?

我现在已经放弃尝试从单个 Gruntfile 执行多个目标。 Yeoman 的 Gruntfile.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"
  }
}

【问题讨论】:

  • 它不应该读取默认的 Gruntfile。作为一个实验,在运行 grunt build --gruntfile Gruntfile2.js 之前,您是否尝试过删除默认 Gruntfile.js 或将其重命名为随机名称?
  • 好建议。这个会带我进入另一个兔子洞。现在出现并发错误:dist 任务警告:找不到有效的 Gruntfile。有关如何配置 grunt 的更多信息,请参阅入门指南:gruntjs.com/getting-started 致命错误:无法找到 Gruntfile。
  • 这在此处记录:github.com/gruntjs/grunt-cli/issues/26 虽然,在恢复到 grunt-cli v0.1.8 后,我收到了同样的错误。
  • 更新:这似乎是 grunt-concurrent 任务的问题。请参阅github.com/sindresorhus/grunt-concurrent/issues/17 以获得进一步的通信。一旦我解决了这个问题,我会回来寻求解决方案。
  • 看起来您正在取得进展,尽管我怀疑问题出在并发任务上,因为我自己刚刚尝试过,并且它可以与自定义 Gruntfile 一起按预期工作。你能发布你的 package.json 文件吗?

标签: gruntjs yeoman


【解决方案1】:

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

请看这里:https://github.com/sindresorhus/grunt-concurrent/blob/v0.1.0/tasks/concurrent.js#L11

在当前版本的插件上,标志是通过的,见这里:https://github.com/sindresorhus/grunt-concurrent/blob/v0.3.1/tasks/concurrent.js#L22

所以,我建议更新你的 grunt-concurrent 版本:

npm install grunt-concurrent@latest --save-dev

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2016-03-02
    • 2018-11-18
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    相关资源
    最近更新 更多