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
spm 的困境 #959
Comments
问题感觉主要还是前端的模块化和代码管理缺乏统一的标准. 每个公司可能都有自己一套方案. 这样就导致了很难有一个工具能够适用所有情况. 我个人觉得这和 java 社区的 Maven 发展有点类似. 早期也是 Ant 独占天下, 大家都是按照自己的方式通过写 Ant 脚本来管理. 但是这种方式相对也是比较落后的. 但是随着Maven的出现和大家的认可, 越来越多的开源项目都开始通过 Maven 管理. 然后为了更好的利用这些资源. 各个公司也越来越多的开始使用 Maven了, 而且也更加认可 Maven. 但是我们面临的阻力其实更大. 因为目前我们的方案在国外好多开源项目中并没有使用, 所以才有了我们的 transport, 这个也基本上保证了使用了我们套东西, 大部分好的开源项目也是可以用的. 我感觉可以从下面2个方面继续:
|
spm 应该走向全面的前端静态资源管理,就像 FIS |
简单地说, transport 大家的标准完全无法统一。。 |
期待大家的讨论。 |
支持 fis 方案 |
支持FIS,对于解释性的后台语言没有问题,但是编译性的后台语言的话。。。貌似没那么好搞啊? |
@newtonniu 如果用模板的话和后台语言无关。就算用类似 jsp 的的语言也可以先用 fis 处理再做编译。 |
@popomore .NET呢,貌似不是很好处理?模板用FIS模式的确没有问题,但是会打乱发布流程! |
设计的时候就放到发布流程中就不算打乱了吧,这个要针对具体的流程看如何处理。 .net 不太熟悉,支付宝是 java 的,我们用 fis 的难点主要是历史架构的兼容上面。 |
@popomore 兼容的确很头疼,坐等下面的讨论~ |
到现在搞不好 one page app 打包的表示非常关心文档... 文章没提 SeaJS 和国外社区关系怎样? |
我简单的说说我个人的拙见吧。 但是java跟js最大的不同是,java是一门强语言类型,有比较完善的包管理机制。 |
不如,确定死了,合并压缩只用grunt、spm只用来模块管理。 在 2013年10月12日下午6:25,xccvista notifications@github.com写道:
|
现在就是这样的哦 spm 是纯粹的包管理 2013/10/12 wxnet2013 notifications@github.com
王保平 / 玉伯(射雕) |
我觉得抱怨是没有用的,这样吧,我会我修改的提交代码。希望为中国的开源事业做出一些贡献。 |
好,非常期待 2013/10/12 xccvista notifications@github.com
王保平 / 玉伯(射雕) |
我觉得可以从源和构建两方面去优化。 源原来的源范围太小,适用面不广(JS 模块 > CMD 模块 > Transport 的 CMD 模块)。原来源中存放的是 Transport 后的 CMD 模块,而且这个 Transport 规则是支付宝使用的,并不一定符合其他人使用习惯。 我觉得源应该更加开放,里面存放的代码不应该是构建后的,而是应该源码,应该是构建前的 CMD 模块。更激进的想法是源中存放的就是 CommonJS 模块,这就和 component、bower、browserify 相似了。 而包管理工具就可以用 component、bower、browserify 等,甚至于直接用 npm。 构建如果按照上面的优化,构建就不需要和源及包管理扯上关系了,是代码能使用的最后一步。构建也分成两种,本身的构建和依赖的构建。
构建的步骤应该先用包管理工具下载依赖,下载下来的还是源码,之后就将代码编译打包。这一步构建的规则就可以自定义了,所以分享和构建并不冲突。 PS: 听说 fis 也在搭类似源的东西,可以共建 |
seajs很不错,很简单很好用,可是不客气地说,构建的配套做得不好 官方引导把构建从spm转向grunt,可是配套的grunt插件与spm的行为表现完全不一致: 昨天还发现了一个,spm build的时候只要指定了output,就会自动分析该文件的依赖,找到所需的模块。grunt-cmd-transport需要自己指定,问题是项目规模比较大,这么多模块都去人工指定是不可能的。可以通过dynamic src-dest部分解决,问题是需要人工排除掉不提取的源文件。总之是需要人工干预,没有spm那么方便 而且这些坑,都是在构建过程中一个个踩到的,文档上都没有提到,太伤了。。。spmjs,seajs,grunt-cmd-transport,grunt-cmd-concat的所有文档和issue我都看过了好几遍。PS:感觉spmjs那边对issue的答复也比seajs慢不少 |
@kyfxbl spm-build 也是基于 grunt 写的,只是很多人不适应这套方案,才提供扩展性强的 grunt 插件,spm-build 基本就是支付宝内部在用。 做一个工具不可能照顾每个人的需求,好一点的工具能让别人来适应,但 spm 不够好。 |
可是grunt-cmd-xxx插件有坑呀。。比如54,55,56,或许是我自己使用不当,但是针对这些场景,希望官方也能给出最佳实践或者建议。。。我现在也搞不清楚这些到底是插件的缺陷,还是我自己使用错误。能读的文档我已经读完了。。 |
Grunt 很灵活,但使用成本也很高;spm-build 简单但扩展性不强;我们以前是这样区分两个工具的,所以你用 grunt 就势必要知道构建的流程,这里面就涉及到方方面面。 PS: 文档不好写,求文档高手。 |
文档我可以写了贴上来,实际上54的场景,我们就完全调整了目录结构来适应grunt-cmd-transport;55的场景,我也自己写了一个grunt custom task,过程也发出来了。但是56,感觉是grunt-cmd-transport的一个BUG,这就不是文档能解决的了 57我现在也准备写一个custom task来解决 |
读完文档还不能解决的,建议继续阅读源码。。。 |
56是BUG吗? |
原来 spm@1.x 的方案就是我们自己来构建,妄图解决业界所有的构建需求。 现在用 Grunt 来打包,很重要的一点诉求就是我们不再提供构建流程,只提供构建的 Task 和构建的目标。这个需要业界利用 Grunt 的生态环境自己去探索。 |
加油,把新方案系统完善起来,想好了,就去做。 和 Chair 一样,新的源、包管理方案,也整理出一份系统的文档出来,做为一个重要方向去做。 这一块让偏右牵头来做,可行? 2013/10/30 偏右 notifications@github.com
王保平 / 玉伯(射雕) |
不做,天天折腾这个干嘛,现在费了老大劲好不容易稳定下来了,有点时间搞些更有价值的不是更好。spm@2.x 本来都不应该出现。 技术人员一闲下来就天天瞎折腾。 |
个人比较期待的是一套方便的开发方案, 前端大小的应用做起来坑很多 比较期待的是文档, 社区文章推荐方案, 以及各方面丰富的模块 |
spm还真心不好用,目前公司的项目都用上了seajs,构建都是基于grunt,还算方便。但seajs还没得到“国际认可”,模块需要手动打包确实增加不少使用成本,与其说是spm的困境,还不如说是seajs的困境。 |
+1 适合自己才是最好的 |
@newtonniu 能具体介绍一下如果 .NET 项目使用 fis 所产生的影响吗?比如影响发布流程,怎么影响了等。因为这次项目第一次用.NET,对.NET的运行机制等都还不是很了解 |
spm@3.0 和 spmjs.org 的未来,欢迎来这里讨论。 |
百度的同学基于fis写了一个这个https://github.com/fouber/spmx,感觉还是挺不错的 |
@elover |
我觉得这个你们应该可以帮他,如果两者能取长补短,seajs社区应该会发展的更好。 |
大半夜胡思乱想,思路比较乱,请拍砖。 不是一般混乱,不知所言。 |
加油。没事就来看看进度。。。 |
个人感觉整套生态链是:
seajs入门还是比较容易的,但是一到部署就很麻烦了(spm非常难上手!),部署麻烦其实给seajs生态发展造成很多麻烦 建议把seajs的demo的部署工具换成用grunt写的,比较通用简单的部署工具! 只有前两者(seajs,部署工具)充分发展了,包管理(spm)才会快速发展 |
最近研究了几天的seajs,总结如下: 优点:
缺点:
|
spm 的资料好少,按seajs的步骤,合并,都是一堆的错,让我很不解。 所以现在用require了,不知道,seajs,能不能搞个支持grunt的,配置不是那种有错找不出来的那种。 |
spm@3.0 和 spmjs.org 的未来,欢迎来这里讨论。
spmjs/spm#718
spm 的困境
历史
spm 发展到现在已经很长时间了。
现状
就算 spm 的定位发生了改版,但seajs 社区的问题仍然集中在构建,这个与 seajs 的设计是分不开的。
构建最多的问题是什么?生成的 id 与 seajs 请求的路径不匹配,应该每个新人都会掉坑里,偏右有总结过一篇文档 #930
构建最关键的一步是 transport,简单点说就是把 define(factory) 改成 define(id, deps, factory), #426 ,有些新人对 transport 不了解胡乱生成一个模块 id,这 id 又与 seajs 的配置不相符,这就是问题所在。不知道现在有多少人认为 spm 是一个构建工具。
问题还不只是这些,spm 会把模块上传到源上,源上的模块都是编译过的,所以模块的源码和包是耦合的(主要是 id 和 deps),这与大多数包管理工具的差别很大。比如现在源上的文件都是有版本号的,但是很多人不希望有版本号,这就没法处理了。
以上问题可能是很多人不愿使用源的理由。
源地址 https://spmjs.org/
未来
spm 还只是一个处理静态文件的工具,比较好的方案应该像 fis 一样把页面也管起来。比如分析静态文件,计算 seajs 的应该存放的路径,transport 时根据分析结果生成 id 和 deps,然后在页面上自动生成 seajs 以及配置文件。
源应该要发生改变,可以把源码传到源上,这样有足够的扩展性。当要使用的时候通过一个工具下载,处理依赖,构建。倾向于和 component 整合。
大半夜胡思乱想,思路比较乱,请拍砖。
The text was updated successfully, but these errors were encountered: