fex-team / fis3

FIS3
http://fis.baidu.com
BSD 2-Clause "Simplified" License
2.79k stars 693 forks source link

求教:seajs项目向fis迁移,公共模块如何处理 #552

Open UselessGuy opened 8 years ago

UselessGuy commented 8 years ago

seajs项目中的目录如下,往fis3迁移时遇到公共模块(js和css)如何处理? 个人有个想法是把公共的模块单独处理后放到cdn服务器上后,在module/index.html单独引用公共的模块,不知道这样处理是否合适。毕竟seajs是要依赖公共模块的。 --css ------common.css --common ------zepto ------seajs --module ------css ------js ----------index.js ------index.html ------fis-conf.js

hefangshi commented 8 years ago

FIS的做法更倾向于在将所有模块都放在本项目中,业务部署时是同步部署到CDN的。

另外你如果是用fis3,建议还是使用 mod.js 而不是 seajs ,可以少走很多弯路。

UselessGuy commented 8 years ago

@hefangshi 项目一直在用seajs,包括打包。只不过目前有了自己的cdn服务器,想往fis迁移,如果都改成modjs,真心改不动。

hefangshi commented 8 years ago

按我理解,你现在并没有碰到问题,只是问这样是否可行对么?

我认为是可行的,但是如果实现上传到CDN,感觉没有太大的使用FIS来处理这部分工作的必要。

UselessGuy commented 8 years ago

我把公共的模块放到fis-config.js同级目录下,生成是没有问题的。但是这样每个子模块都包含公共模块,以后修改公共模块就要修改所有子模块下的公共模块。可否用fis-plus的方式,或者说fis-plus+seajs是否可用?

UselessGuy commented 8 years ago

@hefangshi fis-plus+seajs可以一起用吗?还是说fis-plus必须与modjs

hefangshi commented 8 years ago

fis-plus只能和mod.js配合

UselessGuy commented 8 years ago

@hefangshi 我把公共的模块放到fis-config.js同级目录下,生成是没有问题的。但是这样每个子模块都包含公共模块,以后修改公共模块就要修改所有子模块下的公共模块。 1、不能用fisp,有什么好的建议么 2、假设公共模块放在业务模块中,在发布的时候多个业务模块如何保证公共模块只有同一份?

hefangshi commented 8 years ago

fis-plus 连接公共模块和业务模块的方式是每个模块的资源都有一个唯一ID,namespace:resource ,然后资源ID和他实际对应的资源的路径会有一个 key value 对保存在 map.json文件中。

业务模块在编译时是不依赖公共模块的,而是会在后端模板渲染时,获取业务方引用的公共模块的资源ID,然后在 map.json 文件中查找对应的路径,再进行加载。

更详细的内容可以看看 http://fex.baidu.com/fis-site/docs/dev/more.html

至于如何在 sea.js 下实现这套功能,我的建议是不建议折腾,你如果非要使用 seajs,请使用单项目模式,不要做项目拆分。

pony2048 commented 8 years ago
htdocs/
│
├── project-a/
│  ├── index.html
│  ├── fis-conf.js
│  └── js/    项目seajs模块
│       
│       
├── project-b/  目录结果同project-a
│
└── base   通用js目录,包含jQuery,seajs,公共seajs模块

跟lz的情况差不多,项目目录的js目录(/project/js/)保存项目seajs模块,项目目录平级的base目录(/base/)保存通用seajs模块,请问这种目录结构,还有的救吗?可以把项目目录的seajs模块和公共的打包在一起吗?