我有一个正在使用grunt进行构建和部署的项目。如果根本不使用优化,那么构建工作就没有问题,我会得到一个很大的js文件来将其部署到生产环境中。
我遇到的问题是,我有一些外部框架(比如angularJS),我已经有了它的最小化/优化版本,并且不想再优化它。
目前,在没有优化的情况下,我通过gruntfile中的单独路径配置包含了这个框架的精简版本。而在我的普通main.js中,我有用于开发的非最小化版本。
现在我想使用优化器来优化我自己的代码,但不想优化外部框架。但是外部框架应该包含在生成的大javascript文件中。基本上,我想告诉优化器在某些情况下应该使用原始文件。
我可以这样做吗?
我只找到了一个全局排除选项,所以一些模块根本不会包含在优化后的js中。
这是我的grunt配置:
requirejs: {
compile: {
options: {
baseUrl: "<%= pkg.folders.jsSource %>",
name: "../external-libs/almond-0.1.1",
include: "main",
mainConfigFile: "<%= pkg.folders.jsSource %>/main.js",
out: "<%= pkg.folders.build + pkg.name + '-' + pkg.version %>/js/main.js",
//logLevel: 0,
optimize: "uglify2",
//optimize: "none",
paths: {
'angular':'../external-libs/min/angular-1.0.4',
'jquery':'../external-libs/min/jquery-1.7.2',
'jquery.mobile':'../external-libs/min/jquery.mobile-1.2.0',
'adapter': '../external-libs/min/jquery-mobile-angular-adapter-1.2.0',
'moment': '../external-libs/moment-1.6.2.min',
'iscroll': '../external-libs/min/iscroll-4.2.5',
'iscrollview': '../external-libs/min/jquery.mobile.iscrollview-1.2.6',
'add2Home': '../external-libs/min/add2home',
'config/config': "config/<%=configDatei%>"
}
}
}
},
这是main.js的相关部分:
require.config({
paths:{
'angular':'../external-libs/angular-1.0.4',
'jquery':'../external-libs/jquery-1.7.2',
'jquery.mobile':'../external-libs/jquery.mobile-1.2.0',
'adapter': '../external-libs/jquery-mobile-angular-adapter-1.2.0',
'moment': '../external-libs/moment-1.6.2.min',
'iscroll': '../external-libs/iscroll-4.2.5',
'iscrollview': '../external-libs/jquery.mobile.iscrollview-1.2.6',
'add2Home': '../external-libs/add2home'
},
shim:{
'angular':{ deps:['jquery'], exports:'angular' },
'iscroll':{ deps:['jquery'], exports:'iscroll' },
'iscrollview':{ deps:['jquery.mobile', 'iscroll'], exports:'iscrollview' }
}
});
谢谢你的帮助。
发布于 2013-06-13 14:01:18
只有一些建议使用empty:来指示而不是来将模块包括在优化中。
在require.config中,将指示min文件的使用情况。
requirejs: {
compile: {
options: {
{{ all other settings }}
paths: {
'angular':'empty:',
}
}
}
},
require.config:{
paths:{
'angular':'../external-libs/min/angular-1.0.4',
},
}
请注意,这是"empty:“,在末尾有一个冒号,而不是"empty”。如果省略冒号,将得到如下错误:
"No such file or directory [...]/empty.js"
希望这能有所帮助。
发布于 2014-03-12 18:49:31
我有同样的问题,外部库总是被重新简化为对答案的注释,这是我用来解决这个问题的方法。我有两个任务,一个用于我的代码,另一个用于外部库。它实际上只是复制文件--所以只复制一个任务也可以。我还对外部库使用了"empty:“键,这样就不会包含在我的代码的缩减中。
requirejs: {
options: {
mainConfigFile: '...',
fileExclusionRegExp '...common things to exclude...'
},
main: {
options: {
baseUrl: '.../js',
dir: '.../js-built',
fileExclusionRegExp: /^external$/,
... etc ...
}
},
external: {
options: {
baseUrl: '.../js/external',
dir: '.../js-built/external',
optimize: 'none'
}
}
}
https://stackoverflow.com/questions/16522216
复制相似问题