-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
路线图
重要的第一步
- Toy webpack
- react 成功运行 ~~
考察插件
- 参照 coredns 的插件逻辑 实现插件机制
- 多种方式暴露插件调用,grpc, .so, ipc
伪代码逻辑:
package xxxPlugin
import (
"fmt"
"github.com/seasonjs/espack/pkg/api/plugin"
)
func init() { plugin.Register("espack_plugin_corejs", NewPlugin) }
func NewPlugin(opt interface{}) *interface{} {
fmt.Println("plugin is regist in espack")
return nil
}{
"entry": {
"main": "index.jsx"
},
"output": "dist",
"plugins": [
{
"name": "espack_plugin_corejs",
"option": {
"xxx": "xxx",
"others": "this is others option"
}
}
]
}调研npm替代方案
-
调研npm代替方案 js.mod -> go mod like?
-
调研npm元数据api获取
-
调研unpack方式获取,不大可行,es module 太少(可能会成未来的答案,但是现在我选npm)
-
调研go解压tgz格式文件
-
调研go.mod 解析生成原理
-
获取元数据
-
解决循环依赖
-
根据js.mod依赖生成js.sum
-
根据package.json 生成js.mod
-
根据解析好的数据下载tarball
-
处理espack install 命令逻辑
-
处理单个包下载命令逻辑
-
增加更多go mod like && npm like && yarn like 命令
-
完全摆脱对node_model的依赖优先考虑 统一保存,为了兼容性需要增加一个转译的cache,将下载的非esm模块提前转义为esm
-
调研Import maps vs js.mod的可能性
-
调研 其他多包其他 vs js.work的可能性
调研esbuild ast语法析出方案
- 放弃通过esbuild 生成的方案
- 转变为通过改造github.com/tdewolff/parse 进行Lexer,并自行根据estree生成ast
- estree 数据结构定义
- Lexer 施工
- Parser 施工
需要消灭的问题
- 逐步解决代码中的TODO注释
- 补充测试,增加代码覆盖率
- 命名更符合go风格(x),更加c-like(√)
- 内部代码调整
- 注释,文档国际化
移除gin框架,它build之后过于大了->切换到liteS(gin lite)
迁移之后,没有了冗余的以下依赖,应用程序大小缩小了5M~~
github.com/gin-contrib/sse v0.1.0
github.com/go-playground/validator/v10 v10.9.0
github.com/goccy/go-json v0.7.8
github.com/json-iterator/go v1.1.12
github.com/mattn/go-isatty v0.0.14
github.com/stretchr/testify v1.7.0
github.com/ugorji/go/codec v1.2.6
google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v2 v2.4.0
- 完美运行起gin的lite版
- 移除过重依赖
- 内部日志改造
- 完全改造为适合从内存/静态文件夹获取的server
调研go 18的泛型和monorepo
https://go.googlesource.com/proposal/+/master/design/45713-workspace.md
1.现在的go的ast结构还是不让人满意
2.现在的项目层级太深了
支持p2p 发布与下载包功能
https://github.com/anacrolix/torrent
ts 语言特性兼容
- 支持所有的类型编程特性
css 特性
assest资源处理
eslint特性支持
Metadata
Metadata
Assignees
Labels
No labels