全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用Browserify来实现CommonJS的浏览器加载方法

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模块化  # 加载  # 是一个  # 放在  # 给大家  # 就会  # 就能  # 这两个  # 希望能  # 并将  # 这对  # 可以看到  # 使其  # 详细介绍  # 很长  # 一个问题  # 停在  # 这篇  # 能将  # 报错  # 用在 


相关文章: 北京网站制作公司哪家好一点,北京租房网站有哪些?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  网站制作难吗安全吗,做一个网站需要多久时间?  如何高效搭建专业期货交易平台网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  Swift中循环语句中的转移语句 break 和 continue  建站之星伪静态规则如何正确配置?  已有域名如何免费搭建网站?  如何通过服务器快速搭建网站?完整步骤解析  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何零基础开发自助建站系统?完整教程解析  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何快速搭建个人网站并优化SEO?  网页设计与网站制作内容,怎样注册网站?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  宝塔面板创建网站无法访问?如何快速排查修复?  如何通过免费商城建站系统源码自定义网站主题与功能?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  制作网站的软件免费下载,免费制作app哪个平台好?  寿县云建站:智能SEO优化与多行业模板快速上线指南  Android自定义控件实现温度旋转按钮效果  如何在IIS7上新建站点并设置安全权限?  定制建站哪家更专业可靠?推荐榜单揭晓  清除minerd进程的简单方法  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  深圳网站制作的公司有哪些,dido官方网站?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  建站之星后台管理系统如何操作?  建站168自助建站系统:快速模板定制与SEO优化指南  如何快速选择适合个人网站的云服务器配置?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何在服务器上三步完成建站并提升流量?  建站三合一如何选?哪家性价比更高?  ,怎么用自己头像做动态表情包?  宝塔新建站点为何无法访问?如何排查?  公司门户网站制作流程,华为官网怎么做?  网站代码制作软件有哪些,如何生成自己网站的代码?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。