为什么我的grunt-contrib-requirejs没有优化任何东西?

时间:2015-01-23 23:18:41

标签: javascript gruntjs requirejs grunt-contrib-requirejs

我正在尝试使用grunt-contrib-requirejs任务启动并运行 一般来说是RequireJS的新手并且从未使用过optimizer / r.js,我真的很困惑如何让它工作。

首先,我设置了一个简单的目录结构:

root
├── js
│   ├── helper
│   │   ├── a.js
│   │   ├── b.js
│   │   └── d-dep.js
│   └── main.js
├── node_modules
│   └── [dependencies from package.json]
├── Gruntfile.js
└── package.json

我在浏览器中对它进行了测试,所有依赖项都在那里正确加载。

我的Gruntfile:

module.exports = function(grunt) {
  grunt.config.init({
    requirejs: {
      options: {
        baseUrl: 'js/',
        mainConfigFile: 'js/main.js',
        dir: 'target/',
        keepBuildDir: true
      }
    }
  });

  require('load-grunt-tasks')(grunt);
}

main.js:

require(["helper/a", "helper/b"], function(util) {
  console.log('main.js loaded');
});

a.js

console.log('a.js loaded');

b.js

define(['js/helper/b-dep.js'], function(bdep) {
  console.log('b.js loaded');
});

B-dep.js

console.log('b.js dependency loaded');

运行grunt requirejs时,我收到Done, without errors.消息,但看不到任何优化文件 - 我猜这个错误是在Gruntfile中,可能是路径。

你看到有什么东西袭击了你吗?为什么没有优化,虽然它说Done, without errors.

2 个答案:

答案 0 :(得分:1)

你似乎没有告诉它优化某些东西。您应该设置name选项以告诉它主模块是什么。此外,您在传递给grunt的配置中缺少一级配置。 options对象必须位于更具体的目标中,例如compile

requirejs: {
  compile: { // <<== nest the options in this.
    options: {
      baseUrl: 'js/',
      mainConfigFile: 'js/main.js',
      name : 'main', // <<=== add this
      dir: 'target/',
      keepBuildDir: true
    }
  }
}

设置mainConfigFile是不够的,因为这只会告诉优化器应该从哪里获取运行时配置。它不会告诉优化器该文件是一个模块。请注意,.js中缺少name扩展名不是错误。您应该避免在模块名称中使用扩展名,除非有特定原因要求扩展名。 namebaseUrl相关,因此'main'而非'js/main'就是这样的原因。

答案 1 :(得分:0)

检查我的配置,这是我用来创建名为all.js

的文件
     requirejs : {
        dist : {
          options : {
            waitSeconds : 0,
            baseUrl : "./app/",
            name : 'assets/js/main',
            mainConfigFile: 'app/assets/js/main.js',
            out : "dist/assets/js/all.js",
            optimize : "uglify2",
            inlineText : true,
            findNestedDependencies : true,
            paths : {
                requireLib : "assets/bower_components/requirejs/require",
            },
            include : [
                "requireLib"
            ]
          }
        }
      }