Requirejs r.js 优化
Requirejs r.js optimization
我正在使用 requirejs 开发应用程序。该应用程序使用页面客户端路由框架。实际上它是一个使用哈希标签的单页应用程序 router.The 应用程序结构是这样的
index.html
----app
--------global
--------modules
--------router
--------config.js
--------main.js
----vendor
----bower_compenents
----images
----css
索引将加载 main.js 文件,该文件将加载配置和路由器。
main.js 看起来像这样。
requirejs(['./config'], function (config) {
"use strict";
require(['router/router']);
},function(err){
console.log(err);
});
router.js 将使用散列标签加载控制器和其他模块。
我的疑问是如何使用 r.js 构建应用程序?我不想包含 bower_compenents 和 vendor 文件夹中的任何内容,其中包含 jquery、下划线等框架。只需要包含应用程序文件夹中的文件。
这是我的配置文件
requirejs.config({
waitSeconds: 0,
paths: {
async: '../bower_components/requirejs-plugins/src/async',
map: 'https://maps.googleapis.com/maps/api/js?v=3.exp',
linkedin : '//platform.linkedin.com/in.js?async=true',
gapi: 'https://apis.google.com/js/client:platform',
facebook: '//connect.facebook.net/en_US/sdk',
jquery: '../bower_components/jquery/dist/jquery.min',
jqueryui: '../bower_components/jquery-ui/jquery-ui.min',
cookie:'../vendor/jquery.cookie',
page: '../bower_components/page/page',
polyglot: '../vendor/jquery.polyglot.language.switcher',
bootstrap : '../bower_components/bootstrap/dist/js/bootstrap.min',
text : '../bower_components/requirejs-text/text',
validate : '../bower_components/jquery-validation/dist/jquery.validate',
datatables : '../vendor/jquery.dataTables.min',
dataresp : '../vendor/dataTables.responsive.min',
typeahead : '../bower_components/typeahead.js/dist/typeahead.bundle',
underscore : '../bower_components/underscore/underscore-min',
camera : '../vendor/camera',
qs: '../vendor/qs',
sweetAlert : '../bower_components/sweetalert/dist/sweetalert.min',
colorbox : '../bower_components/jquery-colorbox/jquery.colorbox-min'
},
shim: {
'polyglot': {
exports: 'polyglot',
"deps" : ['jquery']
},
'map': {
exports: 'map'
},
'facebook' : {
exports: 'FB'
},
'linkedin' : {
exports: 'IN'
},
'gapi':{
exports :'gapi'
},
'cookie': {
"deps" : ['jquery']
},
'datatables':{
"deps" : ['jquery']
},
'dataresp' :{
"deps" : ['jquery' , 'datatables']
},
'bootstrap':{
"deps" : ['jquery']
},
'validate':{
"deps" : ['jquery']
},
'underscore': {
exports : '_'
},
'camera':{
exports: 'camera',
"deps" : ['jquery', 'jqueryui']
},
'colorbox' : {
exports : 'colorbox',
"deps" : ['jquery']
}
}
});
已找到完整的 r.js 个示例构建文件 acn here。实际上你可以通过两种方式做到这一点。一种是将所有的 js 和 html 文件压缩成一个 .这是常见的 r.js 压缩方式,可以减少对服务器的请求。
其他方法是缩小每个文件而不合并整个文件。这样请求的数量不会减少,但文件的大小会减少。
对于第一个案例,您可以尝试
({
mainConfigFile : "app/config.js",
baseUrl: "./app",
out: "../build/app/main.js",
optimizeCss : "none",
optimize: "uglify2",
name: 'main',
removeCombined: true,
findNestedDependencies: true,
})
你可以使用第二个
({
appDir: "./",
baseUrl: "app",
dir: "../../build",
modules: [
{
name: "main"
}
],
})
最好使用gulp来满足您的需要。在 gulp 中创建一个任务,只将需要的文件复制到其他文件夹,然后使用第二种方法构建应用程序。这样其他文件就不会优化了。
我正在使用 requirejs 开发应用程序。该应用程序使用页面客户端路由框架。实际上它是一个使用哈希标签的单页应用程序 router.The 应用程序结构是这样的
index.html
----app
--------global
--------modules
--------router
--------config.js
--------main.js
----vendor
----bower_compenents
----images
----css
索引将加载 main.js 文件,该文件将加载配置和路由器。 main.js 看起来像这样。
requirejs(['./config'], function (config) {
"use strict";
require(['router/router']);
},function(err){
console.log(err);
});
router.js 将使用散列标签加载控制器和其他模块。
我的疑问是如何使用 r.js 构建应用程序?我不想包含 bower_compenents 和 vendor 文件夹中的任何内容,其中包含 jquery、下划线等框架。只需要包含应用程序文件夹中的文件。
这是我的配置文件
requirejs.config({
waitSeconds: 0,
paths: {
async: '../bower_components/requirejs-plugins/src/async',
map: 'https://maps.googleapis.com/maps/api/js?v=3.exp',
linkedin : '//platform.linkedin.com/in.js?async=true',
gapi: 'https://apis.google.com/js/client:platform',
facebook: '//connect.facebook.net/en_US/sdk',
jquery: '../bower_components/jquery/dist/jquery.min',
jqueryui: '../bower_components/jquery-ui/jquery-ui.min',
cookie:'../vendor/jquery.cookie',
page: '../bower_components/page/page',
polyglot: '../vendor/jquery.polyglot.language.switcher',
bootstrap : '../bower_components/bootstrap/dist/js/bootstrap.min',
text : '../bower_components/requirejs-text/text',
validate : '../bower_components/jquery-validation/dist/jquery.validate',
datatables : '../vendor/jquery.dataTables.min',
dataresp : '../vendor/dataTables.responsive.min',
typeahead : '../bower_components/typeahead.js/dist/typeahead.bundle',
underscore : '../bower_components/underscore/underscore-min',
camera : '../vendor/camera',
qs: '../vendor/qs',
sweetAlert : '../bower_components/sweetalert/dist/sweetalert.min',
colorbox : '../bower_components/jquery-colorbox/jquery.colorbox-min'
},
shim: {
'polyglot': {
exports: 'polyglot',
"deps" : ['jquery']
},
'map': {
exports: 'map'
},
'facebook' : {
exports: 'FB'
},
'linkedin' : {
exports: 'IN'
},
'gapi':{
exports :'gapi'
},
'cookie': {
"deps" : ['jquery']
},
'datatables':{
"deps" : ['jquery']
},
'dataresp' :{
"deps" : ['jquery' , 'datatables']
},
'bootstrap':{
"deps" : ['jquery']
},
'validate':{
"deps" : ['jquery']
},
'underscore': {
exports : '_'
},
'camera':{
exports: 'camera',
"deps" : ['jquery', 'jqueryui']
},
'colorbox' : {
exports : 'colorbox',
"deps" : ['jquery']
}
}
});
已找到完整的 r.js 个示例构建文件 acn here。实际上你可以通过两种方式做到这一点。一种是将所有的 js 和 html 文件压缩成一个 .这是常见的 r.js 压缩方式,可以减少对服务器的请求。
其他方法是缩小每个文件而不合并整个文件。这样请求的数量不会减少,但文件的大小会减少。
对于第一个案例,您可以尝试
({
mainConfigFile : "app/config.js",
baseUrl: "./app",
out: "../build/app/main.js",
optimizeCss : "none",
optimize: "uglify2",
name: 'main',
removeCombined: true,
findNestedDependencies: true,
})
你可以使用第二个
({
appDir: "./",
baseUrl: "app",
dir: "../../build",
modules: [
{
name: "main"
}
],
})
最好使用gulp来满足您的需要。在 gulp 中创建一个任务,只将需要的文件复制到其他文件夹,然后使用第二种方法构建应用程序。这样其他文件就不会优化了。