SPM 发布 0.9.0 试用版 #186
Comments
spm server 的应用场景是?貌似和nico server功能重复了 |
dependencies 的作用是啥?依赖不是可以从代码分析出来么? |
我们使用ant 项目的build.xml中已经使用了很多配置,项目名称这些东西,发布路径等等,如果再使用package.json,显得重复。 是不是每个项目都需要定义这样的json,是否可以考虑像jshint那样,可以在命令中增加一个选项是通用配置文件的路径,这样可以把一些通用的项目定义在那里。 |
@jsw0528 dependencies的场景是这样的,就是我们在源代码中:
就是在代码中我们并不依赖某个模块的某个版本,而且写起来也会很简洁, 然后我们可以在配置文件中: dependencies: {
"$": "jquery/1.7.2/jquery",
"_": "underscore/1.0.1/underscore"
} 这样我们会在最终输出的文件中对这些依赖替换成具体的版本. |
@hellolibo |
@kangpangpang 不是有 seajs.config 么 |
@afc163 |
@jsw0528 这样的,有这么一个场景,如果我有一个组件A本来是在jquery/1.6.2测试是没有问题的,然后我新开发一个组件B,如果我这个组件是基于jquery/1.7.2的,那么如果我们对于$的解析全都放入到seajs.config中,那么就可能会有一些潜在的风险。因为我的组件A并不一定保证在1.7.2上可以运行. 所以我们允许用户提前把模块具体的版本提前解析出来,但是如果用户的dependencies配置为
那么也是可以把$的解析有页面使用者来决定. |
@kangpangpang 这样的话,A、B 两个组件是不能同时使用的?如果是这样,用 seajs.config 也能在打包时拿不同的 JQ 啊。 另,如果我不配置 dependencies,打包结果会怎样? 还有我第二个问题,以前的 exclude 怎么实现? |
@jsw0528 目前是可以同时使用的,因为目前每一个组件的依赖都是明确的,而且会把所有的依赖都解析出来. 而且每一个组件都运行在闭包中,也是不会冲突的. 第二个问题,如果你的项目里面没有依赖类似$, underscore, widget等这些全局模块,依赖都是模块内部的文件,则没有问题。dependencies只是用来解析诸如$, _, widget这些全局模块来用的. 目前没有exclude这个选项, 目前合并文件的时候,可以自己指定要合并那些模块。
|
@kangpangpang 在开发阶段呢?不是 spm 还没介入么?此时只有 seajs.config,咋办? 觉得新 spm 的合并策略没旧版灵活啊,seajs 的优点就是能自动管理依赖,现在打包的时候却要明确知道依赖哪些模块 |
@jsw0528 在开发阶段还和原来一样啊,并不要求必须把模块打包后,才能进行调试,我们还是可以通过使用:
spm并没有改变原来的开发习惯,他只是提供了一种打包的策略。 关于依赖的处理是这样的,因为支付宝的场景有点不太一样,我们对组件的稳定性比较看重,所以我们目前每一个模块打包后所有的依赖必须是完备的,就是说他依赖的每一个模块的版本是固定的,是不能通过页面中seajs.config来改变依赖的模块的。 但是你说的那种情况还是说期望对于像jquery, underscore这些还是希望通过seajs. config 来具体的进行映射的话,应该也是可以做到的。我后续增加下这个功能. 目前合并策略还是比较灵活的
应该可以满足大部分场景了,不知道你的场景是什么样子? |
@kangpangpang 感谢耐心回复! 我说的都是基于业务代码的,并不是一个通用组件。 如果我想把所有依赖打包,但不包括某些模块,咋办? |
@jsw0528 关于依赖合并排除,目前是不支持的!但是不知道排除某些模块是指全局模块,还是组件内的模块? 对于是否重复这个看具体的开发过程了!目前我们的场景也还好,不用维护两个地方,seajs.config只是用来解析需要在页面中确定的依赖。 |
@kangpangpang 随便排除什么,但一般是JQ之类的。 不用维护两个地方?那比如我的代码是依赖JQ的,那是在 spm 配置,还是在 seajs.config? |
@jsw0528 我们目前的做法是这样的,对于组件,如果明确的依赖jquery1.7.2,那么就写在package.json中,如果有些通用组件,对于具体依赖jquery版本不在乎, 或者允许把$不仅可以映射为jquery还可以是zepto,那么我们可以把配置放到seajs.config中。 如果对于在开发调试的时候,我们后续可以通过package.json中的dependencies生成seajs.config。 目前排除这个目前我们还没有应用场景,后续的话可以看看如何进行支持. |
@kangpangpang 希望加上排除功能,我会打包全部依赖,但不包括JQ,JQ会和sea.js一起全站缓存。 从package.json生成seajs.config,怎么搞? 现在是不是只有才开发时才需要seajs.config,打包后,id都会换成绝对路径? |
@jsw0528 最后一个问题可以参看下 #151 前面两个问题会考虑下,看看有没有更好的方式来实现。 |
@jsw0528 关于排除功能可以看下 #187 |
@kangpangpang #151 都是在说生态圈模块,他们有一个相对固定的目录结构,打包后的 id 都是基于 seajs 的 base 路径。 能指定输出目录名么?我这边有个需求是打包后的 JS 有个版本控制,就是存放在不同 release 目录。这样如果 id 是 http 开头的全路径,那么在打包的时候就应该把 release 号码也替换进去。 |
@jsw0528 对于业务代码我们的id是:
对alipay首先进行映射, 然后id也会拆分成目录,找到对应的模块. 目前输出我们是默认项目的dist目录。但是我们目前支持生成的模块上传到我们的源服务, 然后也可以把对应的文件自动scp到测试服务器上. |
@kangpangpang 上面的配置是在 seajs.config? 不过还是不能满足我的需求啊,最好还是能自定义输出目录,release 号是项目部署时自动生成的,我能获取到,然后再用于 spm build。 目录结构: |
@jsw0528 恩,是在页面的seajs.config中 关于输出目录目前默认是dist, 近期会支持源代码和打包后的目录自定义. |
今天琢磨了一天,spm还是不太好用。API有些没看明白。 如下目录结构: package.json README.md index.html src/ seajs/ 1.2.0/ sea.js jquery/ 1.7.2/ jquery1.7.2.js json/ 1.0.1/ json.js boot.js a.js b.js c.js dist/ index.html : <script type="text/javascript" src="src/seajs/1.2.0/sea.js" data-main="./src/boot.js"></script> boot.js: seajs.config({ alias : { 'jquery' : 'jquery/1.7.2/jquery1.7.2', 'json' : 'json/1.0.1/json' } , preload: [] , debug : false , map : [] , charset : 'utf-8' }); a.js define(function(require, exports, module) { var b = require('./b'); var c = require('./c'); }) b.js define(function(require, exports, module) { var Json = require('json'); }) c.js define(function(require, exports, module) { var $ = require('jquery'); }) 请问这个场景下,打包配备文件package.json要怎么写,我试了多次都失败。 { "name" : "app" , "version" : "1.0.0" , "dependencies" : { //这里要如何写依赖关系? }, "output" : { "a.js": "." } } 然后,请问spm能否向Ant那样,支持文件复制,文件删除? |
@kangpangpang 建议加个引号: |
@kangpangpang 现在打包必须架个源啊? 感觉以前 搞了半天 SPM,结论是得等你这周的成果啊~加勒个油啊~ |
@jsw0528 目前源已经默认为[http://modules.seajs.org/], 目前里面的模块还在增加中。应该可以满足基本的需求. |
@kangpangpang 非得基于 http 么?这样就必须在线啊。而且我本地是有依赖的文件的。 能判断路径么,以支持本地路径。 我所需要的依赖,未必 modules.seajs.org 有啊 |
@kangpangpang 现在 package.json 的 version 是必选项,但业务代码没这东西啊。 按照目前的打包策略,我把我的目录结构改成:项目XXX/src/a.js,我希望打包后是:项目XXX/{{release}}/a.js 这里的 release 也可以理解为 version,希望能在执行 spm build 时自定义输出路径: |
@kangpangpang 想来想去,还是觉得打包时解析依赖关系靠 package.json 的 dependencies 不是很方便。因为开发时只能从 seajs.config 拿数据,就算能自动生成,那总不能每次改完 package.json 再手动执行某个命令吧? |
@kangpangpang @lepture 感谢两位! 刚发现个问题,我 src 里有 a.js 和 b.js 两个文件,但 package.json 的 |
是不是多了点东西?
|
@jsw0528 是的jquery目录没有删除。 |
@jsw0528 出来的结果是这样的?我只有一个 tgz 包呢。 @kangpangpang this is a bug. |
@jsw0528 关于出现 |
@renhao 谢谢你的建议,对于一些设计思想会逐步整理出来的。 然后你可以到 https://github.com/aralejs/widget 去把这个代码下载下来,然后试试是否可以打包。 |
@kangpangpang 我把 预处理?没这个必要吧?既然我都没配置,干嘛要处理?万一我的 |
@kangpangpang Caught exception: Error: Did not find the modules handlebars\1.0.0\handlebars you need 可能是我机器的问题,我晚上换台电脑试试。 |
@jsw0528 是的,jquery目录应该在解压完成后,删除掉,这个是SPM的问题,下一个版本会fix掉。 关于预处理这块,由于这个build过程是分为多个阶段的,每一个阶段会做相应的事情。比如在合并之前我是首先会对每个模块进行分析,计算相应的依赖关系,然后在进行合并处理,如果不进行处理的话,那逻辑就变成我首先要分析ouput里面的内容,而且还有去解析b.js他的依赖,看看他是否依赖a.js,然后在决定是否对a.js进行处理,这个过程就有点复杂了。 |
@kangpangpang 如果
|
@jsw0528 关于404实际上由于用户可以配置多个源,模块可能存在任意源上,所以目前是一种探测机制,去查看需要的模块在那个源上,后续这个404日志会清楚掉。 不太清楚后面的那句,
|
@kangpangpang 我是说 有了这个预处理过程,打包时就得保证 src 目录里的所有文件都是成品啊。 spm build 后提示
|
@jsw0528 有一个是多余的就是第一个。这个是应该被自动删除掉的,下一个版本会处理掉啊! 关于预处理这块其实就是看看这个模块依赖了那些东西,需不需要我去服务器下载点东西,内部require的模块应该也是需要是一个标准的模块。这个先不用纠结了,后续会灵活处理的。 提示 关于本地源这个,我在#199里面已经提了。tgz只是用于和sources沟通的载体,对用使用者是透明的。 |
@kangpangpang 提示 目前可预知的需求都已经递交给你了,加勒个油吧~ ⛽ 0.9.5 大概什么时候发布? |
@jsw0528 大概17号吧! |
@kangpangpang 我这边遇到的问题跟 @renhao 一样,Windows下面。 着急,文档太少,都在ISSUES里面,每个API都要亲自去试才知道做了些什么。。 httpGET: / |
@kangpangpang @arbang |
@kangpangpang 我把源设置为官方的源,也一样不行。 |
为了方便及时更好的回答和解决大家的问题,大家可以把自己的问题单独提一个issue. 就不在这里统一回答了啊! |
我是来占座的。 |
唉 感觉Seajs用不起来 这个部署工具拖后腿啊 |
@Lc2010 如果工具在使用上有什么问题可以提出来的! |
如果是有跨模块通用的脚本. 这样一般解决方案是啥? 如果都提取合并,那么是不是缓存机制就浪费了呢? |
是否可以给我发个QQ号之类的.我想具体咨询调研一下.看目前项目是否可用 |
可以装下阿里旺旺 然后联系 陆辉 建议还是邮件沟通,IM 适合沟通感情,不适合沟通技术问题。 On Thu, Sep 13, 2012 at 2:37 AM, liangchao notifications@github.com wrote:
王保平 / 玉伯(射雕) |
@lifesinger hi 玉伯. 如果顺利使用上了以后.可以选择用邮件沟通.前期想问的比较多.而且和应用场景相关.所以还是希望能够简单对话.询问一下. 我个人也不建议长期用IM.但开始还是感觉沟通比较快. 而且我还邀请你QQ了. |
Hi,一般网站都有自己的URL更新机制,比如,加时间戳,或加数字,a.js?t=123.js,a_1.js 等。看上面讨论,支付宝是业务代码也用member/1.0.0/member方式,如果这样做是不是每次上线代码都要修改版本号?一般的应用场景是业务代码频繁更新,相关依赖代码也要更新,不知道这种场景有什么合适的策略? 比如我们土豆部署后一般只有2个js,tuilib.js(共通)和page.js(具体业务代码),tuilib.js包含共通的业务代码,所以也要频繁更新,更新tuilib.js后要影响page.js。 上线前:tuilib_1.js 修改tuilib上线后:tuilib_2.js 如果采用tuilib/1.0.0/tuilib,page/1.0.0/page版本控制,修改tuilib后所有page里的依赖配置都要更新一遍,因为我们希望对所有page代码都有效。 |
目前 SPM 经过重新设计和开发,已经发布了最新稳定版:
https://npmjs.org/package/spm
当前版本主要功能还是为了满足支付宝的应用场景,但是设计的时候也考虑到了一定通用性。
对外部用户的使用场景可能支持得还不是很好,欢迎大家提供自己的使用场景,并提出宝贵的意见。
SPM 1.0.0 会根据收集上来的使用场景和需求进行完善。感谢大家。
The text was updated successfully, but these errors were encountered: