国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Browserify簡易入坑指南

vpants / 2022人閱讀

摘要:簡要說明長處在于使用模塊規(guī)范,而不是使用的模塊規(guī)范,以及使用的模塊規(guī)范。簡單使用關于命令行工具使用,請參照官方文檔。相同模塊重復依賴模塊重復依賴很容易理解,模塊實現(xiàn)時可能分割為多個子文件實現(xiàn),每個子文件內部可能會引用同一個模塊,如。

簡介
  

browerify: http://browserify.org/index.html

browserify可以看做瀏覽器端的又一個模塊化工具,在ES6模塊規(guī)范在前端大規(guī)模落地之前更優(yōu)雅的選擇。

簡要說明

browserfify長處在于使用node-flavor模塊規(guī)范,而不是requirejs使用的AMD模塊規(guī)范,以及seajs使用的CMD模塊規(guī)范。打包處理后一般單頁面僅為一個js文件(當然,文件size相當可觀)。相對于其他規(guī)范,最直接的好處是可以直接使用Node生態(tài)中前后端功用模塊,例如uniq, underscore等不依賴Node環(huán)境的包,以及superagent這種做過瀏覽器適配的包。

簡單使用

關于命令行工具使用,請參照官方文檔。在使用中,因為使用webstorm,使用watch的話,每次自動保存都會自動觸發(fā),加重系統(tǒng)無謂的負擔,所以在開發(fā)中,可以選擇直接調用API的方式,如下使用koa作為簡單的server,部分代碼如下:

javascript"use strict";

var util = require("util");
var through = require("through-gulp");

function streamToPromise(stream) {
  if (util.isUndefined(stream.pipe)) return Promise.reject("argument is not stream");

  return new Promise(function(resolve, reject) {
    var destiny = new Buffer("");

    stream.pipe(through(function(data, encoding, callback) {
      destiny = Buffer.concat([destiny, data]);
      callback();
    }, function(callback) {
      resolve(destiny);
      callback();
    }))
  });
}

module.exports = streamToPromise;

此處代碼將stream轉換為promise

javascriptvar transform = require("./promise-stream");
app.use(function *(next) {
  if (this.path.startsWith("/browserify")) {
    var bundle = browserify(path.join(__dirname, "static", this.path)).bundle();
    bundle = yield transform(bundle);
    this.type = "application/javascript";
    this.body = bundle.toString();
    return null;
  }
  yield next;
});

此處代碼,將browserify文件夾內部的js文件,都是用browserify處理,返回處理后的數(shù)據(jù)。如果依賴文件較大的話,時間會比較長,視具體環(huán)境而定。

相同模塊重復依賴

模塊重復依賴很容易理解,模塊實現(xiàn)時可能分割為多個子文件實現(xiàn),每個子文件內部可能會引用同一個模塊,如util。在node環(huán)境下很好理解,在browserify處理后的瀏覽器環(huán)境下,該模塊可以看做是個單例,不同文件內部引用的同名模塊,可以看做引用的同一個變量,簡單示例所有文件均放置于browserify文件夾下,代碼如下:

javascript// core.js
var utils = { "age" : 12 };
utils.increase = function() {
  this.age += 1;
};
module.exports = utils;
javascript// repeat.js
var repeat = require("./core");
module.exports = repeat;
javascript// pristine.js
var pristine = require("./core");
module.exports = pristine;
javascript// index.js
var first = require("./pristine");
var second = require("./repeat");

first.increase();
second.increase();
console.log(first);
console.log(second);

瀏覽器執(zhí)行,輸出結果result.age均為14,和預想結果匹配。

Karma集成測試

需要用到文件預處理器,karma-browserify: https://www.npmjs.com/package/karma-browserify。

karmaAMD模塊測試文件組織結構與引入不同,AMD將測試文件以模塊方式定義,配置中將待測試文件,測試文件設置為served,然后由單一入口文件加載測試文件。使用browserify作為模塊化工具時,需要顯式引入測試文件,配合karma-browerify使用,示例如下:

javascript// ./browserify/utils.js
var uniq = require("uniq");
var utils = {};

utils.uniq = uniq;
utils.sum = function(value) {
  return value.reduce(function(prev, next) {
    return prev + next;
  }, 0);
};

module.exports = utils;
javascript// ./browserify_test/utils.spec.js
var utils = require("../browserify/utils");

describe("browserify style module", function () {
  it("should uniq array with repeat value", function () {
    var source = [1, 2, 3, 2, 3, 4];
    expect(utils.uniq(source)).toEqual([1, 2, 3, 4]);
  });

  it("should sum array with number value", function () {
    var source = [1, 2, 3, 4];
    expect(utils.sum(source)).toEqual(10);
  });
});

詳情移步https://github.com/bornkiller/ModuleBoilerplate。
注意如果使用webstorm,會出現(xiàn)https://github.com/nikku/karma-browserify/issues/23 BUG,修改測試文件,如果不重啟karma server的話,測試文件內容不會改變。

后記

學習使用React的過程中,因為React ES-forward的代碼風格,略顯不適應,所以選擇先學習使用browserify工具,然后延續(xù)React學習過程。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85641.html

相關文章

  • Vuejs自己的構建工具

    摘要:然而,這些模板并不限制你自己對于使用的架構組織和選擇類庫。目前可用的模板包括全功能的,包括熱加載,靜態(tài)檢測,單元測試一個簡易的,以便于快速開始。 最近, 尤大在和人對噴的時候,悄然放出了一個大招,于是為了追趕他的步伐,趕緊試驗了下,并且把原文給大家翻譯下。 原文地址:Announcing vue-cli 譯文源地址: Vuejs自己的構建工具 先上原文翻譯: 最近有很多大量關于Reac...

    leoperfect 評論0 收藏0
  • 學習不一樣的vue實戰(zhàn)(1): 環(huán)境搭建

    摘要:淘寶鏡像是一個完整鏡像,你可以用此代替官方版本只讀,同步頻率目前為分鐘一次以保證盡量與官方服務同步。全功能的,包括熱加載,靜態(tài)檢測,單元測試一個簡易的,以便于快速開始。 showImg(https://segmentfault.com/img/bVOBkJ?w=900&h=500); 首先 首發(fā)博客: 我的博客 項目源碼: 源碼 項目預覽: 預覽 因為個人的喜好和工作的需要,一直...

    BoYang 評論0 收藏0
  • 學習不一樣的vue實戰(zhàn)(1): 環(huán)境搭建

    摘要:淘寶鏡像是一個完整鏡像,你可以用此代替官方版本只讀,同步頻率目前為分鐘一次以保證盡量與官方服務同步。全功能的,包括熱加載,靜態(tài)檢測,單元測試一個簡易的,以便于快速開始。 showImg(https://segmentfault.com/img/bVOBkJ?w=900&h=500); 首先 首發(fā)博客: 我的博客 項目源碼: 源碼 項目預覽: 預覽 因為個人的喜好和工作的需要,一直...

    Atom 評論0 收藏0
  • 學習不一樣的vue實戰(zhàn)(1): 環(huán)境搭建

    摘要:淘寶鏡像是一個完整鏡像,你可以用此代替官方版本只讀,同步頻率目前為分鐘一次以保證盡量與官方服務同步。全功能的,包括熱加載,靜態(tài)檢測,單元測試一個簡易的,以便于快速開始。 showImg(https://segmentfault.com/img/bVOBkJ?w=900&h=500); 首先 首發(fā)博客: 我的博客 項目源碼: 源碼 項目預覽: 預覽 因為個人的喜好和工作的需要,一直...

    OnlyLing 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<