首页 >社区问答列表 >javascript - 怎样用yuicompressor压缩使用了seajs架构的js代码?

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

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

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

  • 阿神
  • 阿神    2017-04-10 12:44:075楼

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

    +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添加回复

  • 回复