本文实例讲述了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模块压缩问题与解决方法实例分析