RequireJS:优化的文件和旧的浏览器
RequireJS: Optimized files and older browsers
我试图确定最好的方式有一个单一的缩小文件,但也支持旧的浏览器在一定程度上。我有一个大型的web应用程序,它使用了大量的第三方库来破坏IE9及以下版本。理想情况下,我希望支持这些浏览器,至少可以检测到它们并向用户显示子视图,要求他们升级。我的RequireJS流程如下:
在我的HTML中,我有一个后端条件语句,它将输出加载链上的第一个链接(我的配置文件),或者输出最小的有效负载(如果在生产服务器上):
<?php
if (env('APP_ENV') === 'dev') {
echo $this->Html->script('libs/requirejs/require', ['data-main' => '/js/src/config.r']);
} else {
echo $this->Html->script('build.min');
}
?>
config.r.js
看起来像这样:
require.config({
baseUrl: '/js',
deps: ['src/boot'],
paths: {
'requireJS': '../bower_components/requirejs/require',
'requireDomReady': '../bower_components/requirejs-domready/domReady',
'handlebars': '../bower_components/handlebars/handlebars.runtime.min',
'templates': 'src/templates',
'jquery': '../bower_components/jquery/dist/jquery.min',
'backbone': '../bower_components/backbone/backbone',
'underscore': '../bower_components/underscore/underscore',
},
shim: {
'handlebars': {
exports: 'Handlebars'
},
'underscore': {
exports: '_'
},
'backbone': {
deps: ['handlebars', 'underscore'],
exports: 'Backbone'
}
}
});
boot.js
看起来像这样:
define([
'requireDomReady',
'src/utils/userAgent'
], function(
requireDomReady,
userAgent
) {
'use strict';
// If we have detected that this browser isnt supported, show the appropriate screen.
if (userAgent.isIE9 || userAgent.isIE8) {
var upgradeScreen = document.getElementById('upgrade-screen');
upgradeScreen.style.display = 'block';
return;
}
// With the inital check of support being completed, load the main app.
require([
'src/app'
], function(
app
) {
requireDomReady(app);
});
});
简化的有效负载基本上合并了config.r.js
, boot.js
和app.js
以及它的所有第三方库。当最小化的有效负载在生产环境中使用所有的库时,它们都会被insta-解析,这使得IE9及以下版本在它们存在时就会出现insta-error。
我怎么能把这个分开,所以这个boot
序列与app
序列分开,同时仍然加载缩小的文件或松散的单个文件?我挂断的部分是我如何做到这一点,但要求它要么需要我的config.r.js,或者,根据我的环境,我的缩小的脚本文件。
任何指导将不胜感激。我不想降级库或添加多边形只是为了摆脱错误和显示升级视图。
任何导致解析错误的代码都需要放在与配置和引导不同的文件中。
你可以把浏览器检查放在配置文件中,如果是IE的话,让它添加不同的路径。
还有IE条件html注释,可以用来加载不同的文件。
这是我如何使用需求加载我的垫片和填充只有当他们是由浏览器需要。
//main
require.config({
paths: {
"JSON": "shims/json2",
"Array": "shims/array",
"input.placeholder": "shims/placeholders.min"
},
shim: {
"JSON": {
exports: "JSON"
}
}
});
if (typeof JSON === 'object') {
define('JSON', [], JSON);
} else {
//load shim for JSON now
require(['JSON']);
}
if (Array.prototype.forEach) {
//if forEach exists assume all new array functions exist
define('Array', [], function () { return Array; });
}
if ('placeholder' in document.createElement('input')) {
define('input.placeholder');
}
shim/polyfill文件要么包含一个定义,要么像JSON一样在require.config.shim中。
//shims/array.js
//Add new array functions to prototype.
if(typeof define==='function'&&define.amd){define('Array',[],function(){return Array});}
然后,如果我需要这个特性,我就包含依赖项。
require(['src/app','JSON','Array','input.placeholder'], function (app, JSON) {
//can now use [].forEach() without checking if it exists
});
- 当我在浏览器中打开HTML文件时,javascript不起作用
- 链接/按钮从子文件夹下载文件--浏览器只是浏览
- 当读取文件时,浏览器打开良好,但它是空白浏览器
- JSON-从浏览器向外部服务器发送哪些http头JSON文件
- 在移动浏览器上显示大型文本文件
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 通过javascript跨浏览器访问outlook联系人文件夹
- 如何设置浏览器打开的文件对话框的文件名(一些默认值)
- 通过Android Chrome浏览器下载文件
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 临时解压缩文件以在浏览器中查看内容
- 在浏览器中打开文本文件-服务器上出现错误
- 浏览器缓存PHP生成的CSS和Javascript文件
- qoxdoo中的离线存储是否与所有浏览器和本地文件系统兼容
- 从服务器返回exe文件,并通过浏览器在客户端下载
- Web浏览器扩展名通用文件
- 浏览器.文件InvokeScript()don'我不在IE9工作
- 可以将信息传递到浏览器文件
- 用于选择和上传安卓 4.4.2 库存浏览器文件的网页
- 跨浏览器文件上传的Jquery插件