不进行异步调用的CommonJS模块加载程序
CommonJS module loader that does not make async calls
我正在开发一个移动网站(它不是一个单页应用程序),该网站的JS占用空间非常小(缩小和gzip小于10KB)。这里没有库或外部依赖项,所有的代码都是在内部编写的普通javascript。为了减少HTTP请求的数量,它在逻辑上被分离为几个文件,这些文件在分解之前被连接起来。文件中没有明确的名称空间。也就是说,它们看起来像:
// crossbrowser.js
function getScrollOffset() {
// implementation
}
function ...
这不太理想,没有显式的依赖关系解析,作用域很容易从函数内部受到污染。没有进行任何处理来检查(lint或编译器)。作为第一步,我认为实现一个显式模块系统可以防止这种情况,并使代码变得更好。
根据我的理解,当在浏览器端使用模块时,他们都希望通过XHR加载CommonJS模块格式和RequireJS、Lab.js等加载程序。我不想那样,我想保留包含所有模块的单一脚本格式。我的文件看起来像:
var define = function () { /* ... */ };
var require = function () { /* ... */ };
define("crossbrowser", function (require, exports, module) {
exports.getScrollOffset = function() {
//
};
// etc.
});
define("foo", function (require, exports, module) {
var crossbrowser = require('crossbrowser');
exports.getNewOffset = function () {
var offset = crossbrowser.getScrollOffset();
// do something
return offset;
}
});
window.addEventListener('DOMContentLoaded', function () {
// really dumb example, but I hope it gets the point across
var crossbrowser = require('crossbrowser'),
foo = require('foo');
crossbrowser.scrollTo(foo.getNewOffset());
});
问题是,是否有任何加载程序以这种方式工作,或者我是否必须编写自己的define
和require
实现?
requirejs等加载程序的好处之一是,您可以在构建过程中使用优化器将所有模块组合成一个缩小的脚本,请参阅requirejs Optimizer
这将允许您在模块化结构中进行开发,但部署优化版本
看看webmake。
Webmake允许在浏览器中使用CommonJS模块。所有的js文件都合并到一个js文件中。装载机非常轻。Webmake也与CoffeeScript配合使用。
如果不需要异步加载,就不需要AMD加载程序。例如,如果使用r.js组合模块,并且必须在生产代码中加载整个RequireJS库。为什么不简单地使用编译器呢?只需看一下CommonJS编译器上的幻灯片http://www.slideshare.net/dsheiko/modular-javascript-with-commonjs-compiler这里是来源/文档http://dsheiko.github.io/cjsc/
- 如何捆绑commonjs模块,除非指定需要
- 如何在JSFiddle上使用CommonJS模块
- 如何使用默认函数导出为 commonjs 模块创建类型
- 定义CommonJS模块时,fn.call(this)与fn()的对比
- 可以Typescript导入CommonJS模块
- Typescript:从CommonJS模块导入默认值,从打字文件导出附加类型
- 打包具有依赖关系的Browser/Server CommonJS模块
- 如何将一个没有模块的js应用程序迁移到commonJs模块
- 闭包编译器可以构建CommonJS模块
- 当作为 CommonJS 模块加载时,Angular 是否全局将自己分配给“window.angular”
- 如何将 CommonJS 模块捆绑到单个 UMD 库文件中
- Java 7 + Rhino 1.7R3 支持 CommonJS 模块
- When是通过node js使用CommonJS模块化时执行的Javascript构造函数
- Backbone是如何做到的.$在CommonJS模块配置中设置
- 我想在commonjs模块中使用全局jQuery
- 通过intern对浏览器CommonJS模块进行单元测试
- 不进行异步调用的CommonJS模块加载程序
- module.exports"和“;exports"在CommonJs模块系统中
- 如何将我的CommonJS模块转换为UMD
- 我怎么能要求'浏览器中的CommonJS模块