Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

seajs用户的疑惑与心塞 #146

Open
honger05 opened this issue Jun 11, 2015 · 9 comments
Open

seajs用户的疑惑与心塞 #146

honger05 opened this issue Jun 11, 2015 · 9 comments

Comments

@honger05
Copy link

使用 seajs 做项目开发时,模块化非常爽

但是要上线时,打包是一个大问题。

背景: 使用的是cmd格式的,不可能改成commonjs的。

seajs.org 介绍 推荐使用配套打包工具spm的

刚开始用 spm2 打包,结果 spm2 抽取依赖时,不抽取所有的依赖 ['a.js', 'b.js'],明明我还有 c.js 没有被抽取, 由于存在 抽取的依赖, 所以不再 执行 require('c.js')。 好吧,我妥协了,手动把抽取的依赖删了,让它能够执行 require() 了。 但是新问题又来了, require被压缩了。至此,决定放弃 spm2.

后来找到了gulp 尝试了很多 例如, gulp-cmd、gulp-seajs-concat、gulp-seajs-transport、gulp-seajs-combo、gulp-seajs 等模块,这些模块要么不抽取id,要么不能合并,始终找不到合适的。

再后来 提issue
@afc163 给我发了个地址 http://sorrycc.gitbooks.io/spm-handbook/content/develop-package/README.html

看了里面buildArgs 的打包方式,有 relative、 al、standalone、ignore等,心喜若狂,这就是我想要的。

马上安装spm3,可当我怎么换着姿势执行 spm build 时,结果都一个样。

哎! 继续翻 issue。 spm build 只内置 standalone 方式, seajs用户 请使用 spm-sea

好吧,只有安装 spm-sea 了, 但是 spm-sea 怎么用的啊!没有文档 一直报错。。 。。

TAT ! 泪奔! 这么久了,我还在查怎么打包。

我的目录:

  --sea-modules
          |_标准模块
          |_static构建后的目录
  --static
          |_业务模块(源文件)
          |_index        

我的需求:

  1. 能根据目录抽取id,如果压缩 require 关键字的话,依赖数组能全部抽取。
  2. 想要把顶级标识的模块打包进来,想要ignore不需要的包。(配置了别名,能知道顶级标识的模块的路径吗?)
  3. 刚开始我想要一句命令打包整个项目,现在能实现就实现吧。

我适合用什么工具打包呢 ?

@sorrycc
Copy link
Member

sorrycc commented Jun 12, 2015

建议试试现在 [email protected] 的构建方式,别用 seajs 了。
https://github.com/spmjs/docs/blob/master/zh-cn/project/get-started.md

@honger05
Copy link
Author

下个项目,我会基于构建去实现。 但这个项目已经来不及了。

能说说 spm-sea 怎么用的吗?

还有spm2的抽取依赖数组的bug能维护下么?

当时做的时候就知道 spm3 和 spm2 有很大的不同,但是想着 spm2 应该能满足需求。

我也是基于 spm2 的构建去开发的。

@sorrycc
Copy link
Member

sorrycc commented Jun 15, 2015

  • 构建完的代码是声明了依赖模块的,require 被压缩应该不会有问题
  • spm-sea 也是基于 commonjs 的,看下来应该不能满足你的需求啊

@honger05
Copy link
Author

是的, 刚刚试了下 spm-sea 不能满足

spm2 构建完之后, 依赖数组 抽取不完整(是bug吧), 看来只有手动补充完整了。

@honger05
Copy link
Author

honger05 commented Jul 3, 2015

因项目需求,还是决定用 spm-sea 打包了。

用spm-sea遇到的问题,希望 @sorrycc 能帮忙解决下。哈哈!! 多谢

1、 让 idleading 支持 {{family}}/{{name}}/{{version}}

 "buildArgs": "--idleading {{family}}/{{name}}/{{version}}"

2、相对文件没有抽取到依赖数组,如。

var $ = require('jquery');
var b = require('./b');

构建参数

 "buildArgs": "--ignore jquery"

构建后

define('xxx/a',['jquery'],function(e){ // ./b 依赖没有加上
  var $ = e('jquery');
  var b = e('xxx/b'); //在这里改了名字
})

@sorrycc
Copy link
Member

sorrycc commented Jul 3, 2015

  • idleading 不支持 {{family}},但 {{name}} 和 {{version}} 是支持的。另外,spm-sea 不加新功能了,建议看下 spm 3.6 的打包方式,standalone 是趋势啊
  • b 已经 define 在当前文件里,就无需在 deps 里加上了

@honger05
Copy link
Author

honger05 commented Jul 3, 2015

spm3.6 看了很多文档和例子,很符合我的期望。只是目前真不能用。

  • idleading 不支持 {{family}} 的话,只能变相添加了
map: [
  ['login/': 'xxx/login/']
]

alias: {
  'login': 'login/1.0.0/login'
}

@honger05
Copy link
Author

honger05 commented Jul 3, 2015

哎,发现构建时手动改代码会产生一些问题,可能会忘记把代码再改回来。

目前最理想的方式是 spm2 的构建

  • cmd 的语法,打包时不需要添加 define 包裹。

现在的 spm2 的 spm build 已经砍掉了啊! 。

@sorrycc 有什么办法可以用 cmd 语法的构建么? spm2

就像 seajs.org 上面讲的构建方式,因为一开始就是围绕那种构建去的。

@afc163
Copy link
Member

afc163 commented Jul 3, 2015

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

No branches or pull requests

3 participants