乐趣区

浅谈Browserify在模块化设计中的应用

采用 require 进行模块化编程

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。在 Node 环境中,一个.js 文件就称之为一个模块(module)
基于 node.js 开发的 JavaScript 程序中,一般会使用 node 环境中的第三方工具库和模块,并采用关键字 require 进行模块导入。

jspack = require("jspack").jspack,
    _ = require("underscore"),
    events = require("events"),
    util = require("util")

以上为对模块的加载。在 node.js 环境中,首先使用 nmp 工具进行安装:

nmp install jspack
nmp install underscore

再使用 node 命令行进行动态执行,不会出现问题。但是,若将该代码放在浏览器 (IE/Chrome/firefox…) 中运行时,就会出现 require is not defined 错误。原因在于浏览器并不支持 require 关键字,进而无法使用 jspack/underscore 模块。

在浏览器中运行 node.js 环境中的 js 程序

可以使用 require.js 工具库来实现模块的定义和加载。详见 require.js

本文主要使用 Browserify。不同于 require.js (AMD), browserify 没有在浏览器上运行模块加载器,而是进行预编译模块的依赖,同时模块的写法和 node.js 一样通过 require 方法引入其他模块,符合 CommonJs 规范,所以像 node.js 模块一样组织和书写代码。几乎无需改动,只需进行预编译

步骤:

npm install --global browserify
browserify source.js -o target.js
<script src="target.js"></script>

得到的 target.js 包含了 source.js 本身以及依赖的模块,所以 target.js 文件大小是远大于 source.js 的。

总结

browserify 优点:
完全简化了模块的开发流程,减少了开发成本,即不用引入额外的模块加载器,也不用过多地考虑模块之间依赖关系。模块定义和加载均与 node.js 一致,无需更改。

browserify 缺点:
编译的文件体积会变得很大,需要包含所有模块。

退出移动版