seajs模块压缩问题与解决方法实例分析

  

本文实例讲述了seajs模块压缩问题与解决方法。分享给大家供大家参考,具体如下:

  

在优化整理项目代码时,想使用seajs来把代码模块化。看了下官方5分钟上手教程,觉得很不错,也没多想就一直开发下去了,也没出什么问题。等一同事说把代码打包个放到设备上去测试一下,发现怎么也跑不起来,郁闷了。

  

于是单步调试一把,发现模块一直加不进来。看了一下seajs的原码,明白了是怎么回事。

  

定义模块解析依赖有两种途径,一种是从<代码>定义(id、deps工厂)中的deps来;还有一种是解析定义代码,从要求中来。来看一下代码:

        Module.define=function (id、deps工厂){   var argsLen=arguments.length//定义(工厂)   如果(argsLen===1) {   工厂=id   id=未定义   }   else if (argsLen===2) {   工厂=deps//定义(deps、工厂)   如果(isArray (id)) {   deps=id   id=未定义   }//定义(id、工厂)   其他{   deps=未定义   }   }//解析依赖项根据模块工厂代码   如果(! isArray (deps),,isFunction(工厂)){   deps=parseDependencies (factory.toString ())   }   …      之前      

如果传了deps那就不进行解析了,如果传那就进行源码解析:

        var REQUIRE_RE=/?& # 63;: \ \ " | [^]) *”|“(& # 63;: \ \”| [^]) *’| \/\ * [\ S \ S] * & # 63; \ * \/| \/(& # 63;: \ \ \/| [^ \/\ r \ n]) + \/(& # 63;=[/^ \]) | \/\/? | \ \ S *要求|(& # 63;:^ |[^]美元)\ brequire \ S * \ (\ S * ([‘]) 1 (+ & # 63;) \ \ S * \)/g   var SLASH_RE=/\ \ \ \/g   函数parseDependencies(代码){   var ret=[]   代码。替换(SLASH_RE”、“)   .replace (REQUIRE_RE函数(m, m1, m2) {   如果(m2) {   ret.push (m2)   }   })   返回受潮湿腐烂   }      之前      

seajs是对源码正则对比,查找,也就是说需要在seajs模块中,是一个关键字。

  

那么问题就来了,一般我们使用的压缩工具都变量进行压缩,不需要是标准的js关键字,所以经过一压缩需要就变成了英语字母....所以自然就无法使用了。

  

  

1。seajs官方给出是seajs标准模块构建工具:https://github.com/seajs/seajs/issues/538使用spm进行构建。

  

2。更换压缩工具,使用一个可以自定义关键字,也就是让压缩工具不压缩需要变量。

  

目前主流的三个压缩工具:YUI Compressor,谷歌关闭编译器,UglifyJS。就目前所知,貌似前两个都不支持自定义关键字(& # 63;)UglifyJS是支持的,所以可以使用UglifyJS进行压缩

        UglifyJS你好。js - o hello.min。js - m - c - r      之前      

通过- r选项来指定变量不压缩。

  

总的来说使用seajs应该尽量的去使用官方的构建工具。

  

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript扩展技巧总结》,《JavaScript字符与字符串操作技巧总结》,《JavaScript数学运算用法总结》,《JavaScript中json操作技巧总结》,《JavaScript错误与调试技巧总结》及《JavaScript数据结构与算法技巧总结》

  

希望本文所述对大家JavaScript程序设计有所帮助。

seajs模块压缩问题与解决方法实例分析