Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

storage 插件 #877

Open
lifesinger opened this Issue · 16 comments

8 participants

@lifesinger
Owner

woods 分享出来了:

#287 (comment)

这个月迁移到 seajs/seajs-storage 库下,成为官方正式插件并持续维护。

感谢 @woodsrong

https://github.com/QzoneTouch/commonWidget/tree/master/seajs-plugin/src

@afc163
Owner

这个是不是丹侠那里可以很快用起来?

@lifesinger
Owner
@woodsrong

感谢玉伯将插件官方化,有问题就交流:)

@woodsrong woodsrong referenced this issue
Closed

localcache #886

@popomore
Owner

现在需要确认的方案,在 #886 中提到缓存的分割方式

一般是按照文件来缓存,而不是按照 define 的模块来缓存,所以需要确定用怎么规则来切割。下面提供一些解决方案。

自定义函数

@QzoneTouch 提供的使用方式

(function(){
  define.pack = function(){
    //blablabla
  }
})();

define.pack(){
  //一个模块
}

闭包

按上面的方式其实可以直接使用闭包

(function() {
  define(...);
  define(...);
});

使用注释

可以定义注释规则

/* url start */
define(...);
define(...)
/* url end */
@popomore
Owner

@lifesinger 能否提供一个 api,可指定模块和请求路径之间的关系,我觉得这个应该 seajs 内置的,比如

// path/to/a.js
define(function(require) {
  require('./b');
  require('./c')
});

编译后

// path/to/a.js
define('path/to/a', ['path/to/b', 'path/to/c'], function(require) {
  require('path/to/b');
  require('path/to/c')
});
define('path/to/b', [], function(require) {
  ...
});
define.alias('path/to/b', 'path/to/a');
define('path/to/c', [], function(require) {
  ...
});
define.alias('path/to/c', 'path/to/a');

这样还是可以按 define 分割,当不存在时应该按照路径去请求,而不是按照模块 id。

@popomore
Owner

@lifesinger 关注下这个话题

@lepture
Collaborator

@popomore 你这是 component 的节奏呀。

@popomore
Owner

@lepture 啦啦啦,借鉴

@lifesinger
Owner

还在想怎么合适

@lifesinger
Owner

一种可能性:

define(id, deps, fn, { fileId: 'path/to/file' })

module.requestUri = resolve(fileId)

define 时通过最后一个参数,在构建时附加上 模块 所在文件的信息。

define 运行后,module 上会增加 requestUri 属性,表示模块来自那个 uri 路径。

@lifesinger
Owner

还得再想想。

@applezqp

目前的解决方案是依据源码分析:

例如 http://xxx/??id1.js,id2.js,combo的文件id1.js和id2.js,这里的前提是文件名称和包的名称是相同的。
根据文件名找到对应包的模块,再分析该模块的依赖中含相对路径的模块,就可以找到这个包所打包的模块。

defind('id1', ['$', './a', './b'], fn);

defind('a', [], fn);

defind('b', [], fn);

defind('id2', ['$', './d', './e'], fn);

defind('d', [], fn);

defind('e', [], fn);
...

支付宝的模块通过测试过确实可行,之前玉伯提到根据seajs.cache来分析依赖,因为切割的时候还未解析,所以模块不在seajs.cache中。

这个方案需要修改seajs-localcache插件splitCombo的接口,splitCombo需要传combo的文件数组:

var splitedCode = splitCombo(resp, splited.files)

该修改暂不提交,@QzoneTouch可考虑是否统一~

@QzoneTouch

splitCombo应该作为一个更通用的combo拆分函数,不依赖于某种具体的combo组织形式,所以我觉得这里应该有三个参数:
response, url, files

@donson

请问这个插件官方化了吗?官方地址在哪?

@popomore
Owner

@donson 现在还没有官方的

@lifesinger lifesinger removed this from the 2.2.0 milestone
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.