客户端的JavaScript require()

Deb*_*dux 81 javascript node.js

是否可以require()在客户端使用(或类似的东西)?

var myClass = require('./js/myclass.js');
Run Code Online (Sandbox Code Playgroud)

And*_*are 41

你应该看看require.jshead.js这一点.

  • @Debra:为什么不去他们网站的"使用"部分? (5认同)
  • 如果您想要一个比require更轻量级的解决方案,请查看[Require()](http://pixelsvsbytes.com/blog/2013/02/js-require-for-browsers-better-faster-stronger/). js,head.js或Lab.js. (2认同)
  • …或如今,您可以将客户端代码与大量工具捆绑在一起,例如[webpack](https://webpack.github.io/) (2认同)

小智 22

我一直在使用browserify.它还允许我将Node.js模块集成到我的客户端代码中.

我在这里写博客:使用browserify将node.js/CommonJS样式require()添加到客户端JavaScript


Ren*_*nck 14

如果你想拥有Node.js风格,require你可以使用这样的东西:

var require = (function () {
    var cache = {};
    function loadScript(url) {
        var xhr = new XMLHttpRequest(),
            fnBody;
        xhr.open('get', url, false);
        xhr.send();
        if (xhr.status === 200 && xhr.getResponseHeader('Content-Type') === 'application/x-javascript') {
            fnBody = 'var exports = {};\n' + xhr.responseText + '\nreturn exports;';
            cache[url] = (new Function(fnBody)).call({});
        }
    }
    function resolve(module) {
        //TODO resolve urls
        return module;
    }
    function require(module) {
        var url = resolve(module);
        if (!Object.prototype.hasOwnProperty.call(cache, url)) {
            loadScript(url);
        }
        return cache[url];
    }
    require.cache = cache;
    require.resolve = resolve;
    return require;
}());
Run Code Online (Sandbox Code Playgroud)

注意:这段代码有效,但不完整(特别是url解析),并没有实现所有Node.js功能(我昨晚把它放在一起). 你不应该在真正的应用程序中使用这个代码,但它为你提供了一个起点.我用这个简单的模块测试它,它的工作原理:

function hello() {
    console.log('Hello world!');
}

exports.hello = hello;
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案,因为它不是一个解决方案.当人们给出解决方案时,我真的很讨厌它.给出答案,帮助他们下次找到解决方案.很好! (3认同)

ser*_*rby 12

我问自己同样的问题.当我调查它时,我发现选择压倒性的.

幸运的是,我找到了这个优秀的电子表格,可以帮助您根据自己的要求选择最好的装载机:

https://spreadsheets.google.com/lv?key=tDdcrv9wNQRCNCRCflWxhYQ

  • 我想知道电子​​表格中包含的选项的存在是否意味着我们作为开发人员还没有找到一个很好的方法来做到这一点? (2认同)

gor*_*gor 9

看看requirejs项目.


xmo*_*jmr 7

我发现通常建议在编译时预处理脚本并将它们捆绑在一个(或很少)包中,require并在编译时将其重写为一些"轻量级填充程序".

我已经使用了应该能够执行此操作的"新"工具

已经提到的browserify也应该很合适 - http://esa-matti.suuronen.org/blog/2013/04/15/asynchronous-module-loading-with-browserify/

什么是模块系统?