Nodejs的模块是基于CommonJS规范实现的,可不可以应用在浏览器环境中呢?
var math = require('math');
math.add(2, 3);
第二行math.add(2, 3),在第一行require('math')之后运行,因此必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于"假死"状态
而browserify这样的一个工具,可以把nodejs的模块编译成浏览器可用的模块,解决上面提到的问题。本文将详细介绍Browserify
实现
Browserify是目前最常用的CommonJS格式转换的工具
请看一个例子,b.js模块加载a.js模块
// a.js
var a = 100;
module.exports.a = a;
// b.js
var result = require('./a');
console.log(result.a);
index.html直接引用b.js会报错,提示require没有被定义
//index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script src="b.js"></script> </body> </html>
这时,就要使用Browserify了
【安装】
使用下列命令安装browserify
npm install -g browserify
【转换】
使用下面的命令,就能将b.js转为浏览器可用的格式bb.js
$ browserify b.js > bb.js
查看bb.js,browserify将a.js和b.js这两个文件打包为bb.js,使其在浏览器端可以运行
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var a = 100;
module.exports.a = a;
},{}],2:[function(require,module,exports){
var result = require('./a');
console.log(result.a);
},{"./a":1}]},{},[2]);
index.html引用bb.js,控制台显示100
//index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script src="bb.js"></script> </body> </html>
原理
Browserify到底做了什么?安装一下browser-unpack,就能清楚原理了
$ npm install browser-unpack -g
然后,使用下列命令,将前面生成的bb.js解包
$ browser-unpack < bb.js
可以看到,browerify将所有模块放入一个数组,id属性是模块的编号,source属性是模块的源码,deps属性是模块的依赖
因为b.js里面加载了a.js,所以deps属性就指定./a对应1号模块。执行的时候,浏览器遇到require('./a')语句,就自动执行1号模块的source属性,并将执行后的module.exports属性值输出
browerify将a.js和b.js打包,并生成bb.js,browser-unpack将bb.js解包,是一个逆向的过程。但实际上,bb.js依然存在
以上这篇使用Browserify来实现CommonJS的浏览器加载方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# browserify
# commonjs
# 利用webpack理解CommonJS和ES Modules的差异区别
# Node对CommonJS的模块规范
# 读懂CommonJS的模块加载
# ES6与CommonJS中的模块处理的区别
# 详谈commonjs模块与es6模块的区别
# 深入理解Commonjs规范及Node模块实现
# 分享一款超好用的JavaScript 打包压缩工具
# 详解如何使用webpack打包JS
# 无编译/无服务器实现浏览器的CommonJS模块化
# 加载
# 是一个
# 放在
# 给大家
# 就会
# 就能
# 这两个
# 希望能
# 并将
# 这对
# 可以看到
# 使其
# 详细介绍
# 很长
# 一个问题
# 停在
# 这篇
# 能将
# 报错
# 用在
相关文章:
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在腾讯云服务器快速搭建个人网站?
高防服务器如何保障网站安全无虞?
股票网站制作软件,网上股票怎么开户?
建站之星logo尺寸如何设置最合适?
C#怎么创建控制台应用 C# Console App项目创建方法
建站之星安装失败:服务器环境不兼容?
如何登录建站主机?访问步骤全解析
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何选择域名并搭建高效网站?
C++时间戳转换成日期时间的步骤和示例代码
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
建站ABC备案流程中有哪些关键注意事项?
北京制作网站的公司,北京铁路集团官方网站?
代购小票制作网站有哪些,购物小票的简要说明?
建站主机与虚拟主机有何区别?如何选择最优方案?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
Android滚轮选择时间控件使用详解
建站之星如何优化SEO以实现高效排名?
如何选择香港主机高效搭建外贸独立站?
如何在宝塔面板创建新站点?
贸易公司网站制作流程,出口贸易网站设计怎么做?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
代刷网站制作软件,别人代刷火车票靠谱吗?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何在建站主机中优化服务器配置?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
开源网站制作软件,开源网站什么意思?
建站主机选购指南:核心配置与性价比推荐解析
TestNG的testng.xml配置文件怎么写
如何用花生壳三步快速搭建专属网站?
如何配置支付宝与微信支付功能?
如何在阿里云购买域名并搭建网站?
建站之星后台管理系统如何操作?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在香港免费服务器上快速搭建网站?
如何彻底卸载建站之星软件?
建站主机选哪家性价比最高?
文字头像制作网站推荐软件,醒图能自动配文字吗?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何在IIS服务器上快速部署高效网站?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
电商网站制作价格怎么算,网上拍卖流程以及规则?
南京网站制作费用,南京远驱官方网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何快速查询网站的真实建站时间?
*请认真填写需求信息,我们会在24小时内与您取得联系。