Open Diablohu opened 6 years ago
❗ 优先项 ❕ 次级优先项 ❔ 需讨论
lerna
处理配置
koot.config.js
webpack
less
modifyVars
hl
global
module
npm install
package.json
publicPath
includes
react-router
basename
client
history
webpack.devServer
validate
port
server.port
devServer.port
打包
chunkmap
.files
koot-style-loader
style-loader
sp-css-loader
css-loader
/logs/build/
生产模式
开发模式
webpack dev server
pm2
正在启动开发模式 (当前步骤 1/5: 生成DLL)
开发模式已启动 @ localhost:8080
检测到文件修改,正在实施热更新...
dll
/logs/dev/
PWA
manifest.json
service-worker
.component
.[name]__component
sp-css-import
koot-cli
koot-upgrade
koot.build.js
i18n
redux
pathname([filename])
content([filename])
styles
scripts
critical
<Root />
manifest
extend()
Promise
Array
Promise.all()
data
data.fetch
Boolean
componentDidCatch()
client.before
<head>
realtimeLocation
routing
isChanging
同构
koa-static
console.log
componentDidCatch
redux.syncCookie = true
redux.syncCookie = false
eval()
store
localeId
koot
SPA
index.html
## 开发进度 #### 通用 - [x] 环境变量的三重优先原则 - 报错 - [x] 端口被占用 - [x] 启动服务器 - [x] 启动dev server - [x] 改名,备选: - `Kato` - `Koot` #### 打包 - [x] 更改 koot.build.js 格式 - 特殊入口 - [x] `client` - [x] `critical` - [x] `service-worker` 生成时忽略该出口 - [x] `polyfill` - [x] `service-worker` 生成时忽略该出口 - Webpack插件 - [x] 回调:开发模式打包后 - [x] 重写/优化 `enter.js` - [x] 整合 `koot.js` 和 `koot.build.js` - 启动时生成现有的 `koot.js` 格式的文件 - [x] 启用 `babel-loader` 缓存 #### 配置文件 - [x] 修改 `webpack` 的 loader 和 plugin 的配置 #### i18n - [x] 流程重写:支持直接打包模式 - [x] 开发模式:更新语言包文件时重新打包 - [x] 替换 `Object` 改为暂存形式 #### 相关log - [x] 开发环境:相关回调方法 log - 打包/build - [x] `before()` - [x] `after()` - client - [x] `before()` - [x] `after()` - [x] `onRouterUpdate()` - [x] `onHistoryUpdate()` - server - [x] `before()` - [x] `after()` - [x] `onRender()` - 端口冲突提示 - [x] 生产环境:服务器端口 - [x] 开发环境:服务器端口 - [x] 开发环境:`webpack-dev-server` 端口 #### 命令 - [x] `koot-build` - [x] `koot-dev` - [x] `--no-open` - [x] 等待服务器启动,而非服务器打包完毕 - [x] `--global`:挂载到全局 pm2 上 - [x] 无设定时随机端口 - [x] 可设定 `webpack-dev-server` 端口 - [x] `koot-analyze` - [x] `koot-start` - [x] `--no-build` #### 注入 / 模板 - [x] 重写模板读取和注入方式,支持 `.ejs` - 特殊注入 - [x] `htmlLang` - [x] `title` - [x] `metas` - [x] 多语言启用时相关的跳转 meta (https://support.google.com/webmasters/answer/189077?hl=en) - [x] `styles` - [x] `critical.css` - [x] 将 `critical` 移出,改用 `filecontent` 方式 - [x] 同构CSS - [x] `scripts` - [x] `redux store` - [x] `polyfill` - [x] `critical` - [x] 将 `critical` 移出,改用 `filecontent` 方式 - [x] 默认入口 - [x] PWA 自动注册 service-worker - [x] `manifest` - [x] `pathname::[filename]` - [x] `filecontent::[filename]` - [x] 有关 `metas` 的基础方案 - [x] `page-info()` - [x] minify #### 全局暴露 - [x] `store` - [x] `history` - [x] `localeId` - [x] `@pageinfo()` - [x] `stage` - [x] `env` - [x] `@load()` #### boilerplate - [x] 在基础 webpack 配置文件中以注释标明特殊入口 - [x] manifest - [x] `prettier` #### CLI - [x] 重写 #### `css-loader` - [x] 文件中不存在 `.component` 时,不做 class 名处理 - [x] 移至主包 / 改名 #### `@pageinfo()` - [x] 浏览器环境修改 metas:初次载入不修改,以保证和服务器结果一致 #### `@load()` - [x] 开发完成 - 考虑使用组件? #### PWA / service-worker - [x] 自动生成 `manifest` - [x] 请求超过一定时间后,强制返回缓存结果 - [x] 选项:仅缓存静态资源(忽略其他请求) #### React - 组件静态方法优化 - [x] 不再要求必须连接 Redux - [x] 方法名通过 `webpackDefinePlugin` 定义 - 同构 - [x] 针对 `react` v16.3 中 `context` 的调整 - [x] 缓存机制 - SPA - [x] `index.html` 中加入同构结果 - `extend` - `styles` - [x] 开发模式:`[filename]-[dir]-[hash]` #### 开发模式 - [x] 根据请求替换 `localhost:3001` - [x] hot-reload #### 其他 - [x] 自动复制静态文件 ## CLI 流程 1. 填写:项目名 2. 填写:项目介绍 3. 填写:作者email 4. 选择:基础框架 (react) 5. 选择:项目模式 (同构 | SPA | SPA+服务器|Static|H5) 6. 选择:是否启用多语言 (on) 7. 填写:打包结果目录 (./dist) 8. 下载:对应的 boilerplate 9. 创建 - manifest - koot.build.js - (多语言启用时) 语言包 10. 显示:后续操作指引
AMP 结合思考
核心
lerna
核心
处理配置
koot.config.js
webpack
插件、loader 的配置扩展less
:modifyVars
hl
)改为global
和module
module
需要抽出 CSS 文件的文件名规则开发模式默认启用 SPAnpm install
)package.json
改为扩展,而非目前的无条件覆盖publicPath
(当前默认includes
)react-router
的basename
机制 (https://stackoverflow.com/questions/42181889/how-to-configure-a-basename-in-react-router-3-x)client
的history
类型设置webpack.devServer
validate
阶段直接报错webpack
配置port
->server.port
&devServer.port
核心
打包
chunkmap
.files
下的内容变为 Arraykoot-style-loader
style-loader
和sp-css-loader
css-loader
的 module 做法:https://css-tricks.com/bridging-the-gap-between-css-and-javascript-css-modules-postcss-and-the-future-of-css//logs/build/
核心
生产模式
核心
开发模式
启动进程时检查是否存在已有进程,如果有,尝试 kill❗webpack dev server
端口可配置webpack dev server
端口在没有指定时随机指定lerna
)❗webpack dev server
端口被占用pm2
方式正在启动开发模式 (当前步骤 1/5: 生成DLL)
开发模式已启动 @ localhost:8080
检测到文件修改,正在实施热更新...
dll
永驻 (/logs/dev/
)通用
PWA
manifest.json
service-worker
通用
sp-css-loader
❔ 文件内不包含.component
或.[name]__component
时,不做特殊处理通用
sp-css-import
通用
koot-cli
koot-upgrade
升级项目到 v0.7 时,自动添加兼容旧结果的 css 规则koot.config.js
再处理koot.build.js
通用
i18n
redux
模式转义文本 (部分语种的文字在内存中失效)React
pathname([filename])
content([filename])
styles
和scripts
注入项:如果模板中没有有关critical
的指定注入项,默认注入critical
的相关内容,反之不进行该操作 (#13)<Root />
manifest
extend()
Promise
的场合做兼容处理:如果是Array
处理为Promise.all()
,如果不是Promise
做同步运行data
/data.fetch
返回值如果不是Promise
、Array
或Boolean
,给出正确的错误提示componentDidCatch()
弃用默认的critical
用法,相关逻辑改到client.before
中client.before
的代码结果要输出到<head>
中realtimeLocation
routing
中加入 BooleanisChanging
React
同构
minify 同构结果koa-static
匹配后应不执行之后的中间件koa-static
koa-static
中间件,分别处理打包结果和其他静态资源console.log
中写出详细错误componentDidCatch
redux.syncCookie = true
)redux.syncCookie = false
)eval()
这部分代码实现部分变量提升store
history
localeId
使用方式koot
React
SPA
index.html
中加入首页同构 HTML 代码测试
原计划表
## 开发进度 #### 通用 - [x] 环境变量的三重优先原则 - 报错 - [x] 端口被占用 - [x] 启动服务器 - [x] 启动dev server - [x] 改名,备选: - `Kato` - `Koot` #### 打包 - [x] 更改 koot.build.js 格式 - 特殊入口 - [x] `client` - [x] `critical` - [x] `service-worker` 生成时忽略该出口 - [x] `polyfill` - [x] `service-worker` 生成时忽略该出口 - Webpack插件 - [x] 回调:开发模式打包后 - [x] 重写/优化 `enter.js` - [x] 整合 `koot.js` 和 `koot.build.js` - 启动时生成现有的 `koot.js` 格式的文件 - [x] 启用 `babel-loader` 缓存 #### 配置文件 - [x] 修改 `webpack` 的 loader 和 plugin 的配置 #### i18n - [x] 流程重写:支持直接打包模式 - [x] 开发模式:更新语言包文件时重新打包 - [x] 替换 `Object` 改为暂存形式 #### 相关log - [x] 开发环境:相关回调方法 log - 打包/build - [x] `before()` - [x] `after()` - client - [x] `before()` - [x] `after()` - [x] `onRouterUpdate()` - [x] `onHistoryUpdate()` - server - [x] `before()` - [x] `after()` - [x] `onRender()` - 端口冲突提示 - [x] 生产环境:服务器端口 - [x] 开发环境:服务器端口 - [x] 开发环境:`webpack-dev-server` 端口 #### 命令 - [x] `koot-build` - [x] `koot-dev` - [x] `--no-open` - [x] 等待服务器启动,而非服务器打包完毕 - [x] `--global`:挂载到全局 pm2 上 - [x] 无设定时随机端口 - [x] 可设定 `webpack-dev-server` 端口 - [x] `koot-analyze` - [x] `koot-start` - [x] `--no-build` #### 注入 / 模板 - [x] 重写模板读取和注入方式,支持 `.ejs` - 特殊注入 - [x] `htmlLang` - [x] `title` - [x] `metas` - [x] 多语言启用时相关的跳转 meta (https://support.google.com/webmasters/answer/189077?hl=en) - [x] `styles` - [x] `critical.css` - [x] 将 `critical` 移出,改用 `filecontent` 方式 - [x] 同构CSS - [x] `scripts` - [x] `redux store` - [x] `polyfill` - [x] `critical` - [x] 将 `critical` 移出,改用 `filecontent` 方式 - [x] 默认入口 - [x] PWA 自动注册 service-worker - [x] `manifest` - [x] `pathname::[filename]` - [x] `filecontent::[filename]` - [x] 有关 `metas` 的基础方案 - [x] `page-info()` - [x] minify #### 全局暴露 - [x] `store` - [x] `history` - [x] `localeId` - [x] `@pageinfo()` - [x] `stage` - [x] `env` - [x] `@load()` #### boilerplate - [x] 在基础 webpack 配置文件中以注释标明特殊入口 - [x] manifest - [x] `prettier` #### CLI - [x] 重写 #### `css-loader` - [x] 文件中不存在 `.component` 时,不做 class 名处理 - [x] 移至主包 / 改名 #### `@pageinfo()` - [x] 浏览器环境修改 metas:初次载入不修改,以保证和服务器结果一致 #### `@load()` - [x] 开发完成 - 考虑使用组件? #### PWA / service-worker - [x] 自动生成 `manifest` - [x] 请求超过一定时间后,强制返回缓存结果 - [x] 选项:仅缓存静态资源(忽略其他请求) #### React - 组件静态方法优化 - [x] 不再要求必须连接 Redux - [x] 方法名通过 `webpackDefinePlugin` 定义 - 同构 - [x] 针对 `react` v16.3 中 `context` 的调整 - [x] 缓存机制 - SPA - [x] `index.html` 中加入同构结果 - `extend` - `styles` - [x] 开发模式:`[filename]-[dir]-[hash]` #### 开发模式 - [x] 根据请求替换 `localhost:3001` - [x] hot-reload #### 其他 - [x] 自动复制静态文件 ## CLI 流程 1. 填写:项目名 2. 填写:项目介绍 3. 填写:作者email 4. 选择:基础框架 (react) 5. 选择:项目模式 (同构 | SPA | SPA+服务器|Static|H5) 6. 选择:是否启用多语言 (on) 7. 填写:打包结果目录 (./dist) 8. 下载:对应的 boilerplate 9. 创建 - manifest - koot.build.js - (多语言启用时) 语言包 10. 显示:后续操作指引