距开课0天0时0分-10247024秒
怪我咯2017-04-10 12:42:07 0 5 450
[JavaScript讨论组]举报回复话题 ↕
yuicompressor会替换本地变量名 于是require就被替换了掉了,但是http://seajs.org/docs/zh-cn/rules.htm... seajs要求require不被替换
yuicompressor好像不能为单独的变量加一个特殊规则 但要为了一个require不压缩所有的本地变量又觉得不划算呀。
5
0
分享
阿神 2017-04-10 12:44:075楼
spm已经支持了局部压缩,假设 a -> b -> c -> d
spm
spm build c.js
则仅仅会合并c和d,而spm还提供有同步和异步两种方案进行require。
require
仔细想了下,鉴于你的需求,我比较倾向于这样处理:
a 里面 require('b') b 里面 require.async('c') c 里面 require('d')
这样spm build的时候可以分开两步:
spm build
spm build a.js spm build c.js
这样可以打包为两个文件,因为这种局部打包其实说到最后还是怎么界定优化策略的问题,spm无法做得太多(或许还是不够聪明),但是因为seajs利用正则把require变成异步的方案仅推荐在开发的时候用,正式上线的时候还是区分开异步(require.async)和同步比较好。
我顺手做了个DEMO,https://gist.github.com/2583839 不知道这样做能否解决你的问题?
赞 +0添加回复
PHPzhong 2017-04-10 12:44:074楼
建议用 spm 来打包
小皮 2017-04-10 12:44:073楼
可以把这个需求提给玉伯http://weibo.com/lifesinger看下。
黄舟 2017-04-10 12:44:072楼
修改源码 util.parseDependencies = function(code) { var ret = [], match, regRequire, regGet = /^function\s*\(\s*(\w+)/;
code = removeComments(code);
match = regGet.exec(code); regRequire = new RegExp('(?:^|[^.$])\\b' + match[1] + '\\s*\\(\\s*([\"\'])([^\"\'\\s\)]+)\\1\\s*\\)', 'g');
regRequire.lastIndex = 0;
while ((match = regRequire.exec(code))) { if (match[2]) { ret.push(match[2]) } }
return util.unique(ret) }
怪我咯 2017-04-10 12:44:071楼
可以使用UglifyJS进行压缩:
UglifyJS hello.js -o hello.min.js -c -m -r require
阿神 2017-04-10 12:44:075楼
spm
已经支持了局部压缩,假设 a -> b -> c -> dspm build c.js
则仅仅会合并c和d,而
spm
还提供有同步和异步两种方案进行require
。仔细想了下,鉴于你的需求,我比较倾向于这样处理:
a 里面 require('b')
b 里面 require.async('c')
c 里面 require('d')
这样
spm build
的时候可以分开两步:spm build a.js
spm build c.js
这样可以打包为两个文件,因为这种局部打包其实说到最后还是怎么界定优化策略的问题,
spm
无法做得太多(或许还是不够聪明),但是因为seajs利用正则把require
变成异步的方案仅推荐在开发的时候用,正式上线的时候还是区分开异步(require.async)和同步比较好。我顺手做了个DEMO,https://gist.github.com/2583839 不知道这样做能否解决你的问题?
赞 +0添加回复
PHPzhong 2017-04-10 12:44:074楼
建议用 spm 来打包
赞 +0添加回复
小皮 2017-04-10 12:44:073楼
可以把这个需求提给玉伯http://weibo.com/lifesinger看下。
赞 +0添加回复
黄舟 2017-04-10 12:44:072楼
修改源码
util.parseDependencies = function(code) {
var ret = [], match, regRequire,
regGet = /^function\s*\(\s*(\w+)/;
code = removeComments(code);
match = regGet.exec(code);
regRequire = new RegExp('(?:^|[^.$])\\b' + match[1] + '\\s*\\(\\s*([\"\'])([^\"\'\\s\)]+)\\1\\s*\\)', 'g');
regRequire.lastIndex = 0;
while ((match = regRequire.exec(code))) {
if (match[2]) {
ret.push(match[2])
}
}
return util.unique(ret)
}
赞 +0添加回复
怪我咯 2017-04-10 12:44:071楼
可以使用UglifyJS进行压缩:
赞 +0添加回复