怎样用yuicompressor压缩使用了seajs架构的js代码?

发布于 2022-08-24 01:32:07 字数 342 浏览 14 评论 0

yuicompressor会替换本地变量名
于是require就被替换了掉了,但是http://seajs.org/docs/zh-cn/rules.htm...
seajs要求require不被替换

yuicompressor好像不能为单独的变量加一个特殊规则
但要为了一个require不压缩所有的本地变量又觉得不划算呀。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

七婞 2022-08-31 01:32:07

spm已经支持了局部压缩,假设 a -> b -> c -> d

spm 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 不知道这样做能否解决你的问题?

洋洋洒洒 2022-08-31 01:32:07

建议用 spm 来打包

楠木可依 2022-08-31 01:32:07

可以把这个需求提给玉伯http://weibo.com/lifesinger看下。

撩起发的微风 2022-08-31 01:32:07

修改源码
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)
}

执笔绘流年 2022-08-31 01:32:07

可以使用UglifyJS进行压缩:

UglifyJS hello.js -o hello.min.js -c -m -r require
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文