类别:企业动态 发布时间:2021-01-07 浏览人次:
在开发组件时,我们可能会期望一类组件放在同一个代码仓库下,就像element那样,我们可以使用element提供的脚手架,也可以使用vue cli 3创建一个更‘新'的项目。
项目创建
通过vue cli 3创建项目,创建文件夹packages用于存放组件。
单个组件目录
在packages下就是每一个组件,每个组件和单独项目一样,会有package.json、README.md、src、dist等文件及目录。
如何演示/调试组件
在组件开发过称中,我们需要对组件进行展示,所以创建了examples文件夹,用于存放每个组件示例。
通过一个列表展示出所有的组件,点击选择当前开发的组件,进入对应的example。
路由的根就是一个导航列表,ponents.js来生成这个路由。
// 路由 import Navigation from "./Navigation"; ponents from "./components"; let routes = ponent = ({ path: `/${component.name}`, component: () = import(`../examples/${component.name}`) routes.unshift({ path: "", component: Navigation export default routes;
自动化脚本
创建/编译/发布
ponents.js配置文件,在examples和packages下创建对应目录。
编译/发布组件,因为仓库下会有多个组件,如果一次发布多个,就需要进入每个文件夹下执行命令。
上面过程实现自动化,有很多种方式,比如可以通过npm run script ,可以直接通过node命令等。这里我参考element,采用了Makefile。
创建script文件夹,其中包括创建脚本new.js和构建脚本build.js。
创建脚本
创建脚本主要就是目录的创建与文件的写入,其中可能需要注意的可能就是格式问题。
一种方式是在``之间,按照规范格式去完成写入内容,这样做比较麻烦,而且可能面临格式化要求修改问题。
另一种方式是在脚本中引入eslint,脚本中的eslint.CLIEngine可以根据配置文件(比如.eslintrc.js)格式化文件。需要注意的是需要比命令行中配置需要多添加fix: true配置, 如下
const CLIEngine = eslint.CLIEngine; const cli = new CLIEngine({ ...require("../.eslintrc.js"), fix: true });
eslint在脚本中的使用方法,更具体的可以参考。
// scripts/new.js部分 components.push({ label: newName, name: newName const updateConfig = function(path, components) { writeFile(path, `module.exports = ${ponents)}`).then(() = { console.log("完成components.js") // 格式化 CLIEngine.outputFixes(cli.executeOnFiles([configPath])) const createPackages = ponentName) { try { const dir = path.resolve(__dirname, `../packages/${componentName}/`) // 创建文件夹 if (!fs.existsSync(dir)) { fs.mkdirSync(dir) console.log(`完成创建packages/${componentName}文件夹`) // 写入README if (!fs.existsSync(`${dir}/README.md`)) { writeFile( `${dir}/README.md`, `## ${componentName} ### 使用说明 ).then(() = { console.log("完成创建README") // 写入package.json if (!fs.existsSync(`${dir}/package.json`)) { writeFile( `${dir}/package.json`, "name": "@hy/${componentName}", "version": "1.0.0", "description": "${componentName}", "main": "./dist/hy-${componentName}.umd.min.js", "keywords": [ "${componentName}", "vue" "author": "", "license": "ISC" ).then(() = { console.log("完成创建package.json") // 创建index.js if (!fs.existsSync(`${dir}/index.js`)) { writeFile(`${dir}/index.js`, `export {}`).then(() = { console.log("完成创建index.js") CLIEngine.outputFixes(cli.executeOnFiles([`${dir}/index.js`])) } catch (err) { console.error(err) const createExample = ponentName) { try { const dir = path.resolve(__dirname, `../examples/${componentName}/`) // 创建文件夹 if (!fs.existsSync(dir)) { fs.mkdirSync(dir) console.log(`完成创建examples/${componentName}文件夹`) // 写入index.vue if (!fs.existsSync(`${dir}/index.vue`)) { writeFile( `${dir}/index.vue`, ` template /template script import { } from '../../packages/${componentName}/index' export default { components: {} /script ).then(() = { console.log(`完成创建examples/${componentName}/index.vue文件`) // 格式化index.vue CLIEngine.outputFixes(cli.executeOnFiles([`${dir}/index.vue`])) } catch (err) { console.error(err) ...
构建脚本
// build.js async function build() { for (let i = 0, len = components.length; i len; i++) { const name = components[i].name await buildService.run( "build", _: ["build", `${root}/packages/${name}/src/index.js`], target: "lib", name: `hy-${name}`, dest: `${root}/packages/${name}/dist`, // 生成格式: monjs,umd,umd-min formats: "commonjs,umd-min" // clean: false ["--target=all", `./packages/${name}/src/index.js`]
Lerna
lerna是一个多包仓库管理的工具,可以帮助创建、管理、发布多包仓库中的包。
关于lerna我也没有太深入得使用,只是用到了发布。mit之后,可以执行publish。lerna会对应代码库打tag,并发布到npm仓库。
项目版本问题
0.0.1为不规范版本号,最小应该从1.0.0开始。npm publish无法发布,但是lerna publish可以发布。
导致结果安装为固定版本号,而不是以^开头的版本号范围。outdate可以检测到有更新,无法通过update升级。
组件开发
组件开发主要是在packages/ component name /src目录下进行,在example/ component name /目录下可以引入该组件src下的源文件,用一些数据来进行开发测试。组件开发和项目中的组件开发基本相同。
作为组件库中的组件,需要更多的考虑其通用性和易用性。不能为了通用而加入很多的属性,而使其失去易用性;同样也不能为了易用,而使其过于简单,使用范围过于局限。
对于每一个属性、每个抛出去的方法,都需要认真考虑其必要性。
唯一不同的地方可能需要注意的是导出的方式。
一种是直接导出组件,ponents中声明,也就是局部注册。
另一种是添加install方法后导出。这种形式需要调用vue.use方法,相当于全局注册。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。
Vue多个件库房开发设计与公布详细说明 本文关键详细介绍了Vue多个件库房开发设计与公布详细说明,网编感觉挺好的,如今共享给大伙儿,也给大伙儿做下参照。一起追随网编回...
2021-01-07谢谢大伙儿关心《选购英国室内空间普遍的四大错误观念 别给室内空间商坑骗》话题讨论,搜易高新科技()投身公司企业网站建设、网络推广服务1六年,针对《选购英国室内空间普遍的...
2021-01-07招聘人数:29职位信息直说吧,我们要人你要钱,那你就来仔细看看吧能给你的薪资福利!!!以人为本,员工是公司宝贵的财富,乐芙为优秀的人才提供具有市场竞争力的薪资待遇,完...
2021-01-07遵照Web2.0的风靡,如今基本上全部的网站都选用DIV+CSS设计方案,但在DIV+CSS整体规划应用,有许多的不正确非常容易,会遭受大家的网页页面实际效果,这儿大家一些附加的射击偏差小结:假...
2021-01-07重要词:互联网营销推广,seo优化,网络推广,检索模块提升,互联网营销推广咨询顾问 现有 6648 人访问 1.顷听顾客互联网消费者服务的基本考虑点是以便考虑消费者要求,他们的站点设计方...
2021-01-07太原市晋强互联网太原市企业网站建设共享做一个让客户喜爱的网站,网站制作是重要,做为消費者最先考虑到对物品的了解随后才考虑到价钱,可是假如是亲戚朋友朋友所详细介绍的...
2021-01-07