国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 15:12:31
字體:
來源:轉載
供稿:網友

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

在優化整理項目代碼時,想使用seajs來把代碼模塊化??戳讼鹿俜?分鐘上手教程,覺得很不錯,也沒多想就一直開發下去了,也沒出什么問題。等一同事說把代碼打包個放到設備上去測試一下,發現怎么也跑不起來,郁悶了。

于是單步調試一把,發現模塊一直加不進來??戳艘幌聅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*/)/gvar SLASH_RE = //////gfunction 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關鍵字,所以經過一壓縮require就變成了abcdefg....所以自然就無法使用了。

解析辦法有兩個:

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

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

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

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

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

總的來說使用seajs應該盡量的去使用官方的構建工具。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript擴展技巧總結》、《JavaScript字符與字符串操作技巧總結》、《JavaScript數學運算用法總結》、《JavaScript中json操作技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數據結構與算法技巧總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南安市| 安吉县| 蒙城县| 治多县| 澄城县| 祁东县| 西城区| 西丰县| 吉木萨尔县| 阿瓦提县| 天全县| 蓝田县| 昌黎县| 辽阳市| 汾阳市| 天镇县| 安图县| 南通市| 龙门县| 新密市| 胶南市| 密山市| 博罗县| 天津市| 弋阳县| 乌兰县| 香河县| 舞阳县| 新竹县| 江北区| 木里| 承德县| 克东县| 黔南| 乐山市| 思茅市| 盘山县| 金湖县| 德清县| 根河市| 棋牌|