-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于基于 Vue CLI 进行企业内二次开发的思考和问题 #2
Comments
关于Service Preset的设想背景企业内使用 Vue CLI 的方式:
为什么需要这个功能
使用方式// vue.config.js
module.exports = {
pluginOptions: {
presets: [
"@fe/vue-cli-preset-crm"
["@fe/vue-cli-preset-ssr", { param: true }]
],
},
} 如何定义 preset导出一个返回 Object 的函数 interface ProjectOptions {
publicPath?: string
outputDir?: string
pluginOptions?: object
}
interface Preset {
plugins: string[]
}
module.exports = function(config: ProjectOptions) : Preset {
return {} as Preset
} preset加载机制
加载策略:
顺序加载插件执行时的合并顺序
// vue.config.js
module.exports = {
pluginOptions: {
// 执行顺序 a、b、c
presets: ["@fe/vue-cli-preset-1"],
},
} // @fe/vue-cli-preset-1
module.exports = function() {
return {
plugins: [ require("a"), require("b"), require("c") ]
};
}
|
豪群的建议
关键信息
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
背景
我本人是 Vue CLI 生态技术的爱好者,期望可以基于 Vue CLI 进行企业内的跨 Vue/React 技术栈的二次定制
企业内的二次定制
1.插件发现策略
目前的 Vue CLI 的插件发现策略是
/^(@vue\/|vue-|@[\w-]+(\.)?[\w-]+\/vue-)cli-plugin-/
但是在公司内,是有一些诉求的:
@fe/react-cli-plugin-x
@fe/xxx-cli-plugin-x
这个时候直接使用 Vue CLI 就没法满足需求,需要进行侵入式的改造,Fork 是我不愿意采取的形式
2.插件使用打点
在企业内,我们开发一些插件是希望能够具体统计出这个插件服务的范围和使用次数的;比如一个编译提速的插件,需要了解到这个插件的使用范围和次数才能衡量出工具对业务的帮助,比如号称 xxx 工具可以提效人力 20%,但是没有数据是没人认可的
这个需求是需要对插件机制的加载执行进行打点统计的,一般情况下也需要进行侵入式的代码改造
3.插件分析
企业内忌讳重复建设,需要保证大家不会疯狂重复造类似轮子,而是类似能力的轮子可以以共建的方式持续迭代和维护,质量和人力节省上都能有提升
我们采取的策略是进行插件分析,通过大概的 Api + 名称 去判断是否重复
4.业务能力定制
比如目前 Vue CLI 仅在 create 阶段有 preset 能力,而企业内会希望在 service 阶段也能有 preset 能力
其它的定制能力:
比如
yarn serve/dev
后进行用户inquirer
交互式对话And 其它一些诉求
我目前的方案
核心想法是希望能够在按需拓展能力的前提下,同时兼容 Vue CLI 已经沉淀的生态能力
插件运行机制
:重写了 Vue CLI 的插件发现、注册、加载、执行,兼容原始 Vue CLI 插件的加载和执行API
:Vue CLI API(PluginAPI、GeneratorAPI)等暴露的是一个个 class,直接extends
然后按需覆盖、增加内置插件
:Vue CLI 的插件基本都是一个个的 js 文件,以形如require('vue-cli-service4/lib/config/app')
的方式获取此文件,然后直接执行即可,这部分增强的诉求不大因为「运行机制」是完全重写的,因此可以支持自定义插件命名的发现策略、增加使用打点、插件分析等能力
现有方案存在的问题
想了解一下是否有更优雅的解法
The text was updated successfully, but these errors were encountered: