Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不进行异步调用的CommonJS模块加载程序_Javascript_Module_Commonjs - Fatal编程技术网

Javascript 不进行异步调用的CommonJS模块加载程序

Javascript 不进行异步调用的CommonJS模块加载程序,javascript,module,commonjs,Javascript,Module,Commonjs,我在一个移动网站上工作(它不是一个单页应用程序),它有一个非常小的JS占用空间(小于10KB的缩小和压缩)。没有库或外部依赖,所有代码都是在内部编写的普通javascript。它在逻辑上被分成几个文件,这些文件在解聚之前被连接起来,以减少HTTP请求的数量。文件中没有明确的名称空间。也就是说,它们看起来像: // crossbrowser.js function getScrollOffset() { // implementation } function ... var defi

我在一个移动网站上工作(它不是一个单页应用程序),它有一个非常小的JS占用空间(小于10KB的缩小和压缩)。没有库或外部依赖,所有代码都是在内部编写的普通javascript。它在逻辑上被分成几个文件,这些文件在解聚之前被连接起来,以减少HTTP请求的数量。文件中没有明确的名称空间。也就是说,它们看起来像:

// crossbrowser.js
function getScrollOffset() {
    // implementation
}

function ...
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());
});
这不太理想,没有明确的依赖项解析,并且范围很容易从函数内部受到污染。没有进行任何处理来检查此(lint或编译器)。作为第一步,我认为实现一个明确的模块系统可以防止这种情况,并使代码更好

阅读CommonJS模块格式和加载程序,如RequireJS、Lab.js和其他,据我所知,在浏览器端使用模块时,它们都希望通过XHR加载。我不想这样,我想保留包含所有模块的单脚本格式。我的文件看起来像:

// crossbrowser.js
function getScrollOffset() {
    // implementation
}

function ...
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());
});

问题是,是否有任何加载程序以这种方式工作,还是我必须自己编写
定义
要求
的实现?

像requirejs这样的加载程序的好处之一是,在构建过程中,您可以使用优化器将所有模块组合成一个小型脚本,请参阅


这将允许您在模块化结构中进行开发,但要部署优化的版本

像requirejs这样的加载程序的好处之一是,您可以在构建过程中使用优化器将所有模块组合成一个小型脚本,请参阅

这将允许您在模块化结构中进行开发,但需要部署一个优化的版本

Webmake允许在浏览器中使用CommonJS模块。所有js文件都合并到一个js文件中。装载机非常轻。Webmake也可以与CoffeeScript一起使用。

请看一看


Webmake允许在浏览器中使用CommonJS模块。所有js文件都合并到一个js文件中。装载机非常轻。Webmake也可以使用CoffeeScript。

如果不需要异步加载,就不需要AMD加载程序。例如,如果您使用r.js来组合模块,并且必须在生产代码中加载整个RequireJS库。为什么不直接使用编译器呢?只要看一下CommonJS编译器上的幻灯片,这里是源代码/文档

如果不需要异步加载,就不需要AMD加载程序。例如,如果您使用r.js来组合模块,并且必须在生产代码中加载整个RequireJS库。为什么不直接使用编译器呢?只需看一下CommonJS编译器上的幻灯片,这里是我使用的源代码/文档

,与almond.js加载程序结合使用。谢谢我使用它,并结合ammond.js加载程序。谢谢