-
Notifications
You must be signed in to change notification settings - Fork 179
提个SPM3在Seajs2.3.0使用下的傻瓜问题 #846
Comments
前面遇到要 copy 出来才能用的问题是因为 build 出来的 id 和 require 的 id 不一致,不能这样用,换一种方法吧。 目前有两种方法:
|
昨天也发现了,alias对于开发无id和build有id逻辑不一致,是个大坑 |
开发模式下,如果 base 是项目根目录,alias 就要包含 sea-modules,格式是 |
还是不大理解,这个坑要怎么填啊。 我的base: '../sea-modules/', 目录结构是seajs之前项目推荐的结构
|
build 到 dist 中的文件并不是直接放在 dist 目录进行使用的。 一般来说,package 的开发目录和线上 cdn 文件的目录当然是要分开的。你不应该把整个 package 的源码也部署到线上吧? 所以,典型的开发流程应该是,在 package 的开发目录进行 build,build 出来文件 然后再使用 seajs 进行调用。 <script src="http://cdn.example.com/path/to/sea.js"></script>
<script>
seajs.config({
base: 'http://cdn.example.com/'
});
seajs.use(['example/1.0.0/index'], function(now) {
console.log(now);
});
</script> |
你的 alias 路径根本就不合理啊。 "transit": "transit/0.9.9/dist/transit/0.9.9/jquery.transit" 目测你把整个 package 连带 dist 这一层结构都作为线上部署的路径了。 |
@afc163 目前还不是线上部署,seajs1.x的时候,线上部署肯定是连*-debug.js 文件都去掉了的 |
好吧,我也看错了。 楼主是到 sea-modules 里面去 build 了吧?希望自己的模块能直接使用 其实你并没有新建一个模块用标准的方式来引用 sea-modules 下安装的模块。 spm3 中,安装到本地的只会是源码,而非构建后的代码。建议楼主新建一个标准的 spm 模块,用 require 和 spm doc watch 来调用和调试你的逻辑。完成开发后,build 你的模块(它会把 sea-modules 下的模块一起构建进来,无须单独构建它们)就可以在线上使用了。 |
@afc163 按照你的回复,那就是真的需要copy出来,我单独一个web项目来管理SPM模块,build以后copy到要使用的项目,这样子。 |
不知道你的 website 的目录结构是什么样的,还是建议按照 spm init 生成的目录结构来开发模块,无论是通用前端模块,还是业务模块。 至于在 website 项目中再调用模块,这就不是 spm 的职责了。 |
@afc163 @sorrycc 本地调试seajs开启debug模块,使用*-debug.js那个文件,上线和本地开发环境也能保持在一个环境中,跟seajs1.x的时候比较像。 seajs1.x上线时候,我也只是将sea-modules文件下的所有文件上传到cdn,更改一个seajs的base配置这么简单。 |
现在我们更推荐使用 但如果使用默认的 include=relative 的方式,对于楼主来说,的确没有直接的办法来获得并所有的依赖模块并部署(现在只能挨个 clone 到本地进行 build 后再部署到 cdn),这个需求我们后续会仔细考虑一下,因为我们也有类似的难题。 具体问题总结是: 感谢反馈和讨论~ |
那么多包,手动发布肯定要累死。。 基于之前接收到的信息,能想到个人觉得比较理想的是云端 build 的方案,具体如下:有个 build-server,输入 name@version,输出 build 后的 dist 目录里的 tar 包,然后发布脚本调这个接口获取文件执行发布。 |
@gumutianqi seajs 被加 define 的问题,可以加 ?nowrap 参数来解决。 <script src='path/to/sea.js?nowrap'></script> |
云端构建发布我们是可以做,第三方怎么办?部署的位置和我们又不一样。 要有个方式让人方便的拿到需要部署的依赖模块的 dist 文件。 |
@sorrycc 加?nowrap的方式我不是很能接受,部署的时候可能还要去挨个去掉,这样会给后续带来更多的问题,还不便于协同开发。@afc163 说的:
我想问题就根本就在这里,让开发环境和部署环境之间的切换变得方便,能够快速的拿到需要部署的依赖模块的 dist 文件是最好的,不一定非要搞什么云端部署。 非常感谢 afc163 sorrycc 对该问题的反馈和回答。 |
还是建议用 include=all 或 include=standalone 啊。 按我的想法,spm 会逐渐淡化 seajs 的存在,spm 本身就是比 seajs 更大的概念。 |
seajs 只是一个 loader,spm 仓库是各种模块组成的海,spm 不需要考虑 seajs 呀,特别要小心不能有强耦合。spm 不是淡化 seajs 的存在,而更应该进一步无视 seajs 的存在。这不是分裂,是更好的发展方向。 |
之前都认为 spm 是 seajs 的一个打包工具。现在应该是 seajs 是 spm 的一个在线下线上的加载工具。 |
本来是想用spm和seajs来加速开发,结果是越用越蛋疼。
兼容性还是个问题:
想想 搞到现在,最终还是直接自己写两个简单的 我也只能自己笑自己战不动了。 也许这东西谁开发的更适合谁吧... |
升级到了SPM3,之后,package管理也更加方便了。不过在seajs中的使用发现了一个小小的问题。就是对于seajs中seajs.config({// 配置}) 问题。
spm3 install 下面的模块是源码,build后,生成dist目录,那seajs的alias配置,如果不指向dist目录就得不到有define包裹的模块,如果配置成指向dist目录的路径,发现require的时候模块console出来是null的,而如果我把dist目录下面的copy出来,变成'zepto/1.1.3/index'',源码那些删掉,require又是正确的的。
我不知道这里是seajs2.x配置问题,还是spm build问题。我该怎么处理。
如果每次build了,还需要copy出来,那岂不是很麻烦,而且,实际website项目中,还需要spm build逻辑代码,这时候有需要alias配置的目录下面必须有package.json文件。
@lifesinger @sorrycc
The text was updated successfully, but these errors were encountered: