Skip to content
This repository has been archived by the owner on Aug 15, 2018. It is now read-only.

spm build 的全依赖逻辑 #820

Closed
afc163 opened this issue Jun 10, 2014 · 11 comments
Closed

spm build 的全依赖逻辑 #820

afc163 opened this issue Jun 10, 2014 · 11 comments
Labels
Milestone

Comments

@afc163
Copy link
Member

afc163 commented Jun 10, 2014

根据合并规则生成合并列表,生成依赖的时候去除合并列表中的信息,这样可以减少依赖内容。


原文

//a.js
require('./b');
//b.js
require('./c');
//c.js
require('jquery');

打包后的文件是:

define('a', ['./b', './c', 'jquery'], function(require, exports, module) {
...
});
define('b', ['./c', 'jquery'], function(require, exports, module) {
...
});
define('c', ['jquery'], function(require, exports, module) {
...
});

这里 jquery 的依赖项重复了三次,c 重复了两次。在一些层级较多的模块(在无线的项目中发现的这个问题)中,这个问题会被成倍放大,导致依赖项占用的字节数远远多过源码。

当打包后几个 define 在同一个文件里时,其实模块 a 上的 c 和 jquery 都不是必须的,模块 b 上的 jquery 也不是必须的。可否有一个精简?

@afc163 afc163 added the discuss label Jun 10, 2014
@popomore
Copy link
Member

不是打包全依赖么?

@afc163
Copy link
Member Author

afc163 commented Jun 10, 2014

见面再说。umi 赶紧发啊,感觉马上就有人要提 issue 了。

@afc163 afc163 added this to the 3.1 milestone Jun 10, 2014
@afc163 afc163 changed the title spm build 的逻辑 spm build 的全依赖逻辑 Jun 10, 2014
@popomore
Copy link
Member

seajs 减小体积的方案,可在顶楼的基础上减少更多的字符,require 中改成 deps 的索引

define('a', ['b', 'c', 'd'], function() {
  require(0); // require('b');
  require(1); // require('c');
  require(2); // require('d');
});

@sorrycc
Copy link
Member

sorrycc commented Jun 27, 2014

晓庆提了一个优化点,可以进一步减少文件大小:同一个 output 文件里 define 过的模块不添加到依赖里。

比如:

define('a', ['b'], function(require) {
  require('b');
});
define('b', function() {});

因为 b 已经定义过了,所以 a 的 deps 里可以不声明 'b',

+ define('a', function(require) {
- define('a', ['b'], function(require) {
  require('b');
});
define('b', function() {});

@popomore
Copy link
Member

是啊,之前说的就是这个逻辑

@army8735
Copy link
Member

这个逻辑好

@fangk
Copy link

fangk commented Jul 2, 2014

-debug的文件下应该什么都有...从xxx-debug.js到xxx.js的时候, deps全部删掉, define的name也可以压缩成a,b,c. 最外层的名字不能压缩. 应该是这个逻辑了

@sorrycc
Copy link
Member

sorrycc commented Jul 2, 2014

-debug 文件应该也不需要当前文件已有的 deps, loader(seajs) 会处理的

@fangk
Copy link

fangk commented Jul 2, 2014

我觉得-debug是最正规的写法(官方推荐写法), 依赖关系全部都有. xxx.js是给机器看的,能压缩的都压掉.

@popomore
Copy link
Member

spmjs/gulp-spm#5

基本完成了,等 spm 更新依赖

@popomore popomore added the build label Jul 14, 2014
@popomore
Copy link
Member

已经测试过了

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

5 participants