在浏览器中加载 CommonJS 模块作为客户端 JavaScript 代码的最佳方式是什么?
CommonJS模块将它们的功能放在module.exports
命名空间中,并且通常包含require(pathToModule)
在服务器端脚本中。在客户端加载它们不能以相同的方式工作(需要替换require,需要考虑异步等)。
我找到了模块加载器和其他解决方案:Browserify、RequireJS、yabble 等或简单地更改模块的方法。你认为最好的方法是什么,为什么?
在浏览器中加载 CommonJS 模块作为客户端 JavaScript 代码的最佳方式是什么?
CommonJS模块将它们的功能放在module.exports
命名空间中,并且通常包含require(pathToModule)
在服务器端脚本中。在客户端加载它们不能以相同的方式工作(需要替换require,需要考虑异步等)。
我找到了模块加载器和其他解决方案:Browserify、RequireJS、yabble 等或简单地更改模块的方法。你认为最好的方法是什么,为什么?
我过去广泛使用过RequireJS (2010 年在BBC iPlayer上实现)并且效果很好。它可以处理 CommonJS 模块,但它需要一个额外的包装器,我觉得这很烦人。
如果您还想在 Node.js 中使用这些模块,您还需要在服务器端使用 RequireJS,我不喜欢这样做,因为它不是惯用的 Node.js JavaScript 代码。
在过去的一年里,我在几个项目中使用了webmake和Browserify 。最初,编译步骤让我望而却步,但今年已经广泛使用它,我可以说这不是问题。
Browserify 包含一个监视功能,效果很好。Webmake 可以连接到观察者(例如watchr),或者,您可以使用webmake-middleware模块,该模块可以用作 Express.js 或连接应用程序的一部分。这样做的好处是,它不是在每次保存时都编译 JavaScript,而是仅在您实际请求时才编译。
Connect使得创建服务器(也是静态的)变得微不足道,因此如果您想在没有后端的情况下开发前端,您可以创建一个小型静态 Node.js 服务器来提供文件。
奖励:不需要构建脚本,因为您总是处理构建的代码。
以下是您当前选项的完整列表,按 GitHub 上各自的受欢迎程度(观察者数量)排序:
使用浏览器化。
它的描述是:“你的节点模块和 npm 包的浏览器端 require()”听起来你需要什么。
为什么?它适用于 Node.js (CommonJS) 模块 / 完全像 Node.js 一样对待模块,并且使用 UMD,为编译的 JavaScript 带来最少的额外代码,允许导出第三方库的全局变量而无需接触它们的代码、源映射和其他人无法做到的技巧:
var str = require( "lorem-ipsum.txt" );
console.log( str );
输出:
Lorem ipsum dolor
sit amet, consectetur
adipiscing elit. Morbi...
以下是幻灯片:https ://speakerdeck.com/dsheiko/modular-javascript-with-commonjs-compiler
Webmake是其中一种选择。我用它来打包一个由 20 多个包的 200 多个模块构建的应用程序。有用。
如果您想查看一些示例,请检查:SoundCloud Playlist Manager。它是严格的客户端并使用 Webmake 构建。
我不能说我已经尝试过您在此处列出的其他方法,但我喜欢RequireJS,因为: