欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

seajs模塊壓縮問題與解決方法實例分析

 更新時間:2017年10月10日 10:06:52   作者:jinphen  
這篇文章主要介紹了seajs模塊壓縮問題與解決方法,結(jié)合實例形式分析了seajs模塊壓縮過程中出現(xiàn)的問題及相應的解決方法,需要的朋友可以參考下

本文實例講述了seajs模塊壓縮問題與解決方法。分享給大家供大家參考,具體如下:

在優(yōu)化整理項目代碼時,想使用seajs來把代碼模塊化。看了下官方5分鐘上手教程,覺得很不錯,也沒多想就一直開發(fā)下去了,也沒出什么問題。等一同事說把代碼打包個放到設備上去測試一下,發(fā)現(xiàn)怎么也跑不起來,郁悶了。

于是單步調(diào)試一把,發(fā)現(xiàn)模塊一直加不進來??戳艘幌聅eajs的原碼,明白了是怎么回事。

define模塊解析依賴有兩種途徑,一種是從define(id, deps, factory)中的deps來;還有一種是解析define代碼,從require中來。來看一下代碼:

Module.define = function (id, deps, factory) {
 var argsLen = arguments.length
 // define(factory)
 if (argsLen === 1) {
  factory = id
  id = undefined
 }
 else if (argsLen === 2) {
  factory = deps
  // define(deps, factory)
  if (isArray(id)) {
   deps = id
   id = undefined
  }
  // define(id, factory)
  else {
   deps = undefined
  }
 }
 // Parse dependencies according to the module factory code
 if (!isArray(deps) && isFunction(factory)) {
  deps = parseDependencies(factory.toString())
 }
 ...

如果傳了deps那就不進行解析了,如果傳那就進行源碼解析:

var REQUIRE_RE = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g
var SLASH_RE = /\\\\/g
function parseDependencies(code) {
 var ret = []
 code.replace(SLASH_RE, "")
   .replace(REQUIRE_RE, function(m, m1, m2) {
    if (m2) {
     ret.push(m2)
    }
   })
 return ret
}

seajs是對源碼正則對比,查找require,也就是說require在seajs模塊中,是一個關鍵字。

那么問題就來了,一般我們使用的壓縮工具都變量進行壓縮,require不是標準的js關鍵字,所以經(jīng)過一壓縮require就變成了abcdefg....所以自然就無法使用了。

解析辦法有兩個:

1. seajs官方給出是seajs標準模塊構(gòu)建工具:https://github.com/seajs/seajs/issues/538 使用spm進行構(gòu)建。

2. 更換壓縮工具,使用一個可以自定義關鍵字,也就是讓壓縮工具不壓縮require變量。

目前主流的三個壓縮工具:YUI Compressor,Google Closure Compiler,UglifyJS。就目前所知,貌似前兩個都不支持自定義關鍵字(?),UglifyJS是支持的。所以可以使用UglifyJS進行壓縮

UglifyJS hello.js -o hello.min.js -m -c -r require

通過-r選項來指定變量不壓縮。

總的來說使用seajs應該盡量的去使用官方的構(gòu)建工具。

更多關于JavaScript相關內(nèi)容感興趣的讀者可查看本站專題:《JavaScript擴展技巧總結(jié)》、《JavaScript字符與字符串操作技巧總結(jié)》、《JavaScript數(shù)學運算用法總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)

希望本文所述對大家JavaScript程序設計有所幫助。

相關文章

  • seajs中模塊依賴的加載處理實例分析

    seajs中模塊依賴的加載處理實例分析

    這篇文章主要介紹了seajs中模塊依賴的加載處理,結(jié)合實例形式分析了seajs模塊依賴與加載的原理、相關注意事項與使用方法,需要的朋友可以參考下
    2017-10-10
  • 詳解Sea.js中Module.exports和exports的區(qū)別

    詳解Sea.js中Module.exports和exports的區(qū)別

    最近在看Seajs時,看到了exports.doSomething和module.exports,想對這兩者的區(qū)別一探究竟。所以下面這篇文章主要介紹了Sea.js中Module.exports和exports的區(qū)別,需要的朋友可以參考借鑒,一起來看看吧。
    2017-02-02
  • sea.js常用的api簡易文檔

    sea.js常用的api簡易文檔

    現(xiàn)在使用sea.js的公司越來越多, 比如阿里巴巴,淘寶網(wǎng),百姓網(wǎng),支付寶,有道云筆記等。模塊化的javascript開發(fā)帶來了可維護、可擴展性,尤其在多人協(xié)作開發(fā)的時候不用再擔心文件依賴和函數(shù)命名沖突的問題,本文給大家分享了sea.js常用的api簡易文檔,下面來一起看看吧
    2016-11-11
  • SeaJS入門教程系列之使用SeaJS(二)

    SeaJS入門教程系列之使用SeaJS(二)

    這篇文章主要介紹了SeaJS入門教程系列之使用SeaJS,著重介紹了SeaJS的使用方法、關鍵方法的使用等,需要的朋友可以參考下
    2014-03-03
  • seajs學習之模塊的依賴加載及模塊API的導出

    seajs學習之模塊的依賴加載及模塊API的導出

    SeaJS是一個遵循 CommonJS 規(guī)范的模塊加載框架,可用來輕松愉悅地加載任意JavaScript模塊和css模塊樣式。SeaJS接口和方法也非常少,SeaJS 就兩個核心:模塊定義和模塊的加載及依賴關系。本文將詳細介紹模塊的依賴加載及模塊API的導出,有需要的朋友們可以參考借鑒。
    2016-10-10
  • seajs模塊之間依賴的加載以及模塊的執(zhí)行

    seajs模塊之間依賴的加載以及模塊的執(zhí)行

    做前端項目已經(jīng)離不開SeaJS了,現(xiàn)在的很多的網(wǎng)站都用了SeaJS,對這個JS模塊加載器原理的越來越感興趣。這篇文章我們來一起學習seajs模塊之間依賴的加載以及模塊的執(zhí)行,感興趣的朋友們下面來一起看看吧。
    2016-10-10
  • seajs學習教程之基礎篇

    seajs學習教程之基礎篇

    Seajs是一個Web模塊加載框架,追求簡單、自然的代碼書寫和組織方式,Sea.js 遵循 CMD 規(guī)范,模塊化JS代碼。依賴的自動加載、配置的簡潔清晰,可以讓程序員更多地專注編碼。這篇文章為seajs深入學習的第一篇,主要介紹的基礎性的內(nèi)容,感興趣的朋友們可以參考學習。
    2016-10-10
  • seajs下require書寫約定實例分析

    seajs下require書寫約定實例分析

    這篇文章主要介紹了seajs下require書寫約定,結(jié)合實例形式分析了seajs中require書寫約定遵循的規(guī)則,需要的朋友可以參考下
    2018-05-05
  • 把jQuery的類、插件封裝成seajs的模塊的方法

    把jQuery的類、插件封裝成seajs的模塊的方法

    這篇文章主要介紹了把jQuery的類、插件封裝成seajs的模塊的方法,需要的朋友可以參考下
    2014-03-03
  • SeaJS入門教程系列之完整示例(三)

    SeaJS入門教程系列之完整示例(三)

    這篇文章主要介紹了SeaJS入門教程系列之完整示例,演示了一個完整的SeaJS開發(fā)例子,需要的朋友可以參考下
    2014-03-03

最新評論