最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

seajs模塊壓縮問(wèn)題與解決方法實(shí)例分析

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

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

在優(yōu)化整理項(xiàng)目代碼時(shí),想使用seajs來(lái)把代碼模塊化??戳讼鹿俜?分鐘上手教程,覺(jué)得很不錯(cuò),也沒(méi)多想就一直開(kāi)發(fā)下去了,也沒(méi)出什么問(wèn)題。等一同事說(shuō)把代碼打包個(gè)放到設(shè)備上去測(cè)試一下,發(fā)現(xiàn)怎么也跑不起來(lái),郁悶了。

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

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

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那就不進(jìn)行解析了,如果傳那就進(jìn)行源碼解析:

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是對(duì)源碼正則對(duì)比,查找require,也就是說(shuō)require在seajs模塊中,是一個(gè)關(guān)鍵字。

那么問(wèn)題就來(lái)了,一般我們使用的壓縮工具都變量進(jìn)行壓縮,require不是標(biāo)準(zhǔn)的js關(guān)鍵字,所以經(jīng)過(guò)一壓縮require就變成了abcdefg....所以自然就無(wú)法使用了。

解析辦法有兩個(gè):

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

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

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

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

通過(guò)-r選項(xiàng)來(lái)指定變量不壓縮。

總的來(lái)說(shuō)使用seajs應(yīng)該盡量的去使用官方的構(gòu)建工具。

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

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • SeaJS中use函數(shù)用法實(shí)例分析

    SeaJS中use函數(shù)用法實(shí)例分析

    這篇文章主要介紹了SeaJS中use函數(shù)用法,結(jié)合實(shí)例形式分析了use函數(shù)加載模塊的使用方法與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 詳解Sea.js中Module.exports和exports的區(qū)別

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

    最近在看Seajs時(shí),看到了exports.doSomething和module.exports,想對(duì)這兩者的區(qū)別一探究竟。所以下面這篇文章主要介紹了Sea.js中Module.exports和exports的區(qū)別,需要的朋友可以參考借鑒,一起來(lái)看看吧。
    2017-02-02
  • seajs學(xué)習(xí)教程之基礎(chǔ)篇

    seajs學(xué)習(xí)教程之基礎(chǔ)篇

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

    seaJs的模塊定義和模塊加載淺析

    這篇文章主要介紹了seaJs的模塊定義和模塊加載淺析,以及模塊間的依賴關(guān)系等問(wèn)題,需要的朋友可以參考下
    2014-06-06
  • seaJs使用心得之exports與module.exports的區(qū)別實(shí)例分析

    seaJs使用心得之exports與module.exports的區(qū)別實(shí)例分析

    這篇文章主要介紹了seaJs使用心得之exports與module.exports的區(qū)別,結(jié)合實(shí)例形式分析了exports與module.exports具體功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-10-10
  • 把jQuery的類、插件封裝成seajs的模塊的方法

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

    這篇文章主要介紹了把jQuery的類、插件封裝成seajs的模塊的方法,需要的朋友可以參考下
    2014-03-03
  • seajs中模塊依賴的加載處理實(shí)例分析

    seajs中模塊依賴的加載處理實(shí)例分析

    這篇文章主要介紹了seajs中模塊依賴的加載處理,結(jié)合實(shí)例形式分析了seajs模塊依賴與加載的原理、相關(guān)注意事項(xiàng)與使用方法,需要的朋友可以參考下
    2017-10-10
  • SeaJS入門教程系列之SeaJS介紹(一)

    SeaJS入門教程系列之SeaJS介紹(一)

    這篇文章主要介紹了SeaJS入門教程,講述了SeaJS的由來(lái),JavaScript傳統(tǒng)開(kāi)發(fā)模式和模塊化開(kāi)發(fā)的對(duì)比,需要的朋友可以參考下
    2014-03-03
  • seajs模塊之間依賴的加載以及模塊的執(zhí)行

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

    做前端項(xiàng)目已經(jīng)離不開(kāi)SeaJS了,現(xiàn)在的很多的網(wǎng)站都用了SeaJS,對(duì)這個(gè)JS模塊加載器原理的越來(lái)越感興趣。這篇文章我們來(lái)一起學(xué)習(xí)seajs模塊之間依賴的加載以及模塊的執(zhí)行,感興趣的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • Seajs源碼詳解分析

    Seajs源碼詳解分析

    近幾年前端工程化越來(lái)越完善,打包工具也已經(jīng)是前端標(biāo)配了,像seajs這種老古董早已停止維護(hù),這是一篇細(xì)細(xì)品味Seajs源碼的文章,看完一定受益匪淺
    2019-04-04

最新評(píng)論

海阳市| 东乌珠穆沁旗| 礼泉县| 武穴市| 兴隆县| 连江县| 溧水县| 仁怀市| 乌苏市| 房产| 兰考县| 桃源县| 随州市| 绵阳市| 涞水县| 龙州县| 牡丹江市| 鸡东县| 高清| 城口县| 策勒县| 南丹县| 巴南区| 凤城市| 成都市| 琼海市| 尼玛县| 山西省| 潜江市| 湘潭县| 布拖县| 永胜县| 阿拉尔市| 类乌齐县| 合作市| 环江| 育儿| 普陀区| 那曲县| 昌都县| 来凤县|