UNPKG

6.14 kBMarkdownView Raw
1<h1 style="font-weight: normal"> 将FEkit项目迁移到YKit </h1>
2
3<h2 style="font-weight:normal"> 生成package.json </h2>
4
5首先需要调用 `` npm init ``生成package.json文件,一路点回车即可。
6
7<h2 style="font-weight: normal"> 下载依赖 </h2>
8
9迁移所需要的依赖是`@qnpm/ykit-config-fekit`包:
10
11```
12qnpm i @qnpm/ykit-config-fekit --save
13```
14
15然后包的postinstall脚本会帮你创建`ykit.fekit.js`到项目根目录下。
16
17所有fekit.config中的有效配置(和构建和发布相关的配置)会被拷贝到ykit.fekit.js中,今后在这个文件中修改即可。
18
19目前没有计划支持fekit install和fekit plugin(例如qmb)相关的配置项。
20
21** 你需要将package.json和ykit.fekit.js两个文件加入到git版本控制中(调用git add),node_modules不需要add。 **
22
23<h2 style="font-weight: normal"> 尝试迁移 </h2>
24
25** 以下内容非常重要,请仔细阅读后再进行操作 **
26
27<h3 style="font-weight: normal"> 目前不支持的项目类型: </h3>
28
29- 使用了`scripts`(premin,prepack,postmin,postpack,prepublish)钩子脚本的项目
30- 各种利用了非常规fekit bug的项目(例如使用注释来require依赖)
31
32以上几类项目目前完全无法迁移,会逐次提供支持,请等待之后版本的ykit-config-fekit。
33
34另外,如果是先使用webpack构建再用FEkit发布的项目,也可以迁移,但是需要手动执行webpack构建过程先生成pack后的文件。
35
36<h3 style="font-weight: normal"> 可能存在的问题 </h3>
37
38目前发现FEKit的模块加载器并未严格遵守CommonJS标准,它的模块ID和文件内容的md5 hash相关,这在一部分依赖了全局变量的项目中可能会导致大bug。
39根本原因是:某些文件内容相同的模块,在FEKit下会被编译成一个module,而在YKit下是两个。
40
41举例说明,假如项目中依赖了avalon.js又依赖了oniui,这表面上不会有问题,但是oniui内部的fekit_modules文件夹包含了avalon的依赖,这两个文件的内容完全相同,
42这会导致在YKit构建出来的js中avalon.js中的逻辑被执行两次,而FEKit构建的js只会执行一次(实际上,YKit的构建结果才是正确的)。
43由于avalon的插件如`mmRequest`,`mmPromise`都是扩展的window.avalon对象,执行两次avalon.js的结果就是
44之前挂载的插件会被完全覆盖。这将导致整个项目不可用。
45
46如果在迁移后控制台报出某个全局变量的方法找不到的错误,就很有可能是这种问题。目前这一类项目还没找到快捷的迁移方法,请先不要独自尝试。
47
48<h3 style="font-weight: normal"> 迁移步骤 </h3>
49
50<h4 style="font-weight: normal"> 1. 本地pack </h4>
51
52首先请在项目根目录下调用`ykit pack -c`生成dev文件。然后注意看一下命令行可能出现的报错,例如:
53
54```
55 X ./~/css-loader?-url!./~/@qnpm/ykit-config-fekit/loaders/fekit-scss.js!./src/styles/expcleisure-index.css
56Module build failed: Missed semicolon (87:127)
57
58 85 | .b_event_description{ padding-bottom:10px; }
59 86 | .b_event_description .e_process{ padding:15px 0 8px 85px; text-align:center; }
60> 87 | .b_event_description .e_process li{ margin-left:12px; padding-right:36px; width:158px; display:inline; float:left; background:background:url(http://source.qunar.com/site/images/zhuanti/130424-1/icon.png) no-repeat 100% 44px; }
61 | ^
62 88 | .b_event_description .e_process li.last{ background:none; }
63 89 | .b_event_description .e_process .step_01, .b_event_description .e_process .step_02, .b_event_description .e_process .step_03, .b_event_description .e_process .step_04{ width:158px; height:114px; background:url(http://source.qunar.com/site/images/zhuanti/130424-1/step.png) no-repeat 0 0; overflow:hidden; }
64 90 | .b_event_description .e_process .step_02{ background-position:0 -125px; }
65```
66
67由于FEkit不会校验css的语法,因此我们发现大部分的项目都存在类似的各种css错误,这在ykit不再被允许,你需要手动修改这些错误以后再尝试迁移。
68
69另外一种错误是样式的循环依赖问题,例如在文件a中有`` @import 'a'; ``的语句,这在FEKit中会被默默无视,但是在YKit里不再被允许。
70在构建过程中你可以看到如下的错误提示:
71
72```
73X ./~/css-loader?-url!./~/@qnpm/ykit-config-fekit/loaders/fekit-scss.js!./src/yo/endorse-progress/page/endorse-progress.scss
74Module build failed: Error: [ykit-config-fekit]: 发现循环依赖config,位于文件/Users/chenjiao/Documents/qzz/complaint/src/yo/endorse-progress/core/config.scss中,请检查。
75```
76
77请修复错误以后再继续尝试。
78
79另外,在js中也可能出现语法错误,例如:
80
81```
82X ./src/scripts/a/touch/recruitSleeper/index.js
83Module not found: Error: Cannot resolve module 'prepareSleeper/index/js' in /Users/chenjiao/Documents/qzz/ugc/src/scripts/a/touch/recruitSleeper
84 @ ./src/scripts/a/touch/recruitSleeper/index.js 5:0-34
85```
86
87这个错误对应的源码长这个样子:
88
89```
90require("prepareSleeper/index/js");
91```
92
93这种错误在fekit中也被默默地无视掉了,请参照报错信息进行修改。
94
95请重复以上两个步骤,直到没有报错为止。
96
97<h4 style="font-weight: normal"> 2. dev测试 </h4>
98
99调用``ykit sync``可以将项目sync到开发机,然后请修改host进行dev测试(这个就不多说怎么弄了)。
100
101最好每个页面都看一下是否有问题。
102
103<h4 style="font-weight: normal"> beta/正式发布 </h4>
104
105按流程走即可。
106
107<h2 style="font-weight: normal"> 支持 </h2>
108
109请qtalk jiao.shen或者yuhao.ju
110
111<h2 style="font-weight: normal"> 已经转化成功的项目列表 </h2>
112
113注意,以下的项目绝大多数都有上面提到的css语法问题和js引用问题,都是手动修复以后转化成功的:
114
115- ugc_mall
116- ugc
117- ugchybrid
118- ugc_mall_admin
119- ugc_review_audit
120- ugc_topic
121- trainticket
122- hotel_fekit
123- bnb_fekit
124- bnbhybrid
125- hotel_luxury
126- mice_search_fekit
127- mice_operation_fekit