Nodejs的模塊是基于CommonJS規(guī)范實(shí)現(xiàn)的,可不可以應(yīng)用在瀏覽器環(huán)境中呢?
成都創(chuàng)新互聯(lián)專注于霍爾果斯網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供霍爾果斯?fàn)I銷型網(wǎng)站建設(shè),霍爾果斯網(wǎng)站制作、霍爾果斯網(wǎng)頁(yè)設(shè)計(jì)、霍爾果斯網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造霍爾果斯網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供霍爾果斯網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。var math = require('math'); math.add(2, 3);
第二行math.add(2, 3),在第一行require('math')之后運(yùn)行,因此必須等math.js加載完成。也就是說(shuō),如果加載時(shí)間很長(zhǎng),整個(gè)應(yīng)用就會(huì)停在那里等。這對(duì)服務(wù)器端不是一個(gè)問(wèn)題,因?yàn)樗械哪K都存放在本地硬盤,可以同步加載完成,等待時(shí)間就是硬盤的讀取時(shí)間。但是,對(duì)于瀏覽器,這卻是一個(gè)大問(wèn)題,因?yàn)槟K都放在服務(wù)器端,等待時(shí)間取決于網(wǎng)速的快慢,可能要等很長(zhǎng)時(shí)間,瀏覽器處于"假死"狀態(tài)
而browserify這樣的一個(gè)工具,可以把nodejs的模塊編譯成瀏覽器可用的模塊,解決上面提到的問(wèn)題。本文將詳細(xì)介紹Browserify
Browserify是目前最常用的CommonJS格式轉(zhuǎn)換的工具
請(qǐng)看一個(gè)例子,b.js模塊加載a.js模塊
// a.jsvar a = 100; module.exports.a = a;// b.jsvar result = require('./a'); console.log(result.a);
index.html直接引用b.js會(huì)報(bào)錯(cuò),提示require沒(méi)有被定義
//index.htmlDocument
這時(shí),就要使用Browserify了
【安裝】
使用下列命令安裝browserify
npm install -g browserify
【轉(zhuǎn)換】
使用下面的命令,就能將b.js轉(zhuǎn)為瀏覽器可用的格式bb.js
$ browserify b.js > bb.js
查看bb.js,browserify將a.js和b.js這兩個(gè)文件打包為bb.js,使其在瀏覽器端可以運(yùn)行
(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;oindex.html引用bb.js,控制臺(tái)顯示100
//index.htmlDocument 原理
Browserify到底做了什么?安裝一下browser-unpack,就能清楚原理了
$ npm install browser-unpack -g然后,使用下列命令,將前面生成的bb.js解包
$ browser-unpack < bb.js可以看到,browerify將所有模塊放入一個(gè)數(shù)組,id屬性是模塊的編號(hào),source屬性是模塊的源碼,deps屬性是模塊的依賴
因?yàn)閎.js里面加載了a.js,所以deps屬性就指定./a對(duì)應(yīng)1號(hào)模塊。執(zhí)行的時(shí)候,瀏覽器遇到require('./a')語(yǔ)句,就自動(dòng)執(zhí)行1號(hào)模塊的source屬性,并將執(zhí)行后的module.exports屬性值輸出
browerify將a.js和b.js打包,并生成bb.js,browser-unpack將bb.js解包,是一個(gè)逆向的過(guò)程。但實(shí)際上,bb.js依然存在
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)標(biāo)題:用Browserify來(lái)實(shí)現(xiàn)CommonJS的瀏覽器加載-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/dchedh.html