我在使用r.js优化器优化一个angular项目时遇到了问题。
我正在尝试使用grunt-requirejs进行优化,直到我尝试将angular排除在构建之外,它才能完美地工作。然后我在angular路由中得到一个错误,说angular是未定义的。我想这样做,这样我就可以从cdn加载angular,但在应用程序中包含angular-route。
为什么angular-route不等到angular被加载?
我知道angular会加载,但有谁知道为什么angular路由会在那之前运行,以及如何修复它?
应用程序
define(['angular', ...], function(angular){
...
});public/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']);
};发布于 2014-07-31 20:30:27
我自己解决了这个问题。
我需要使用wrapShim并使用dep而不是数组来指定依赖项。
应用程序
define(['angular', ...], function(angular){
...
});public/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']);
};https://stackoverflow.com/questions/25058534
复制相似问题