91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-18 09:53:58 來源:腳本之家 閱讀:127 作者:jinphen 欄目:web開發

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

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

于是單步調試一把,發現模塊一直加不進來。看了一下seajs的原碼,明白了是怎么回事。

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關鍵字,所以經過一壓縮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程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通州市| 泊头市| 双鸭山市| 新宁县| 衢州市| 丹棱县| 雅安市| 韶关市| 温州市| 和平区| 麦盖提县| 弥渡县| 辉南县| 竹北市| 潮州市| 塔河县| 莒南县| 子洲县| 徐汇区| 西平县| 福泉市| 沧州市| 友谊县| 诏安县| 云浮市| 灵石县| 石首市| 郧西县| 高州市| 尉氏县| 普陀区| 库伦旗| 石嘴山市| 嫩江县| 航空| 清原| 赫章县| 成都市| 安陆市| 龙井市| 朔州市|