R.js优化器驱逐角度库

时间:2014-07-31 12:10:27

标签: javascript angularjs requirejs gruntjs

我在使用r.js优化器来优化角度项目时遇到了麻烦。

我试图使用grunt-requirejs进行优化,它完美无缺,直到我尝试从构建中排除角度。然后我在角度路线中得到一个错误,表示角度未定义。我想这样做,所以我可以从cdn加载角度,但在应用程序中包含angular-route。

为什么角度路线不会等到角度加载?

我知道angular会被加载,但有人知道为什么之前会运行angular route,以及如何解决它?

应用

define(['angular', ...], function(angular){
...
});

公共/ JS / requirejs-config.js:

require.config({
  shim: {
    angular: {
      exports: 'angular'
    },
    'angular-route': [
      'angular'
    ]
  },
  paths: {
    angular: '../../bower_components/angular/angular',
    'angular-route': '../../bower_components/angular-route/angular-route'
  }
});

require(['app']);

Gruntfile:

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        requirejs: {
            compile: {
                options: {
                    baseUrl: "public/js",
                    name: "app",
                    mainConfigFile: "public/js/requirejs-config.js",
                    out: "public/js/combined.js",
                    paths: {
                        angular: "empty:" //without this it works fine
                    },
                    optimize: "none"
                }
            }
        }
    });


    grunt.loadNpmTasks('grunt-bower-requirejs');
    grunt.registerTask('default', ['requirejs']);

};

1 个答案:

答案 0 :(得分:0)

由我自己解决。

我需要使用wrapShim并使用deps而不是数组指定dependecies。

应用

define(['angular', ...], function(angular){
...
});

公共/ JS / requirejs-config.js:

require.config({
  shim: {
    angular: {
      exports: 'angular'
    },
    'angular-route': {
      deps: ['angular']
    }
  },
  paths: {
    angular: '../../bower_components/angular/angular',
    'angular-route': '../../bower_components/angular-route/angular-route'
  }
});

require(['app']);

Gruntfile:

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        requirejs: {
            compile: {
                options: {
                    baseUrl: "public/js",
                    name: "app",
                    mainConfigFile: "public/js/requirejs-config.js",
                    out: "public/js/combined.js",
                    paths: {
                        angular: "empty:" //without this it works fine
                    },
                    wrapShim: true,
                    optimize: "none"
                }
            }
        }
    });


    grunt.loadNpmTasks('grunt-bower-requirejs');
    grunt.registerTask('default', ['requirejs']);

};