12 Web全栈 组件化设计(3)

这篇具有很好参考价值的文章主要介绍了12 Web全栈 组件化设计(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

组件库项目搭建

目录划分
开发组件库与开发项目的目录划分区别是很大的,我们再组件库开发时通常会把项目氛围源代码包,输出包、还有使用案例宝等等,这里不同的组件库的规划方式不同,带来的结果也不同。

开发环境构建

依赖安装

npm i webpack webpack-cli webpack-dev-server -D
npm i html-webpack-plugin -D

安装搭建Vue项目所需要的依赖包

npm i vue -D // 这里必须-D 安装, 因为项目构建时不能加入vue的源代码
npm i vue-loader -D
npm i vue-template-compiler -D

在webpack.dev.js总加入兼容vue框架的配置

const {VueLoaderPlugin} = require('vue-loader')
//....
module: {
    rules: [
        {
            test: '/\.vue$/',
            use: {
                loader: 'vue-loader'
            }
        }
    ]
},
plugins: [
	new VueLoaderPlugin(),
	...
]

组件库功能设计与实践

预处理器

npm i sass sass-loader -D
npm i style-loader css-loader -D

在webpack.dev.js中加入scss文件的loader配置信息

{
	test: /\.scss$/,
	use: [
		{loader: 'style-loader'},
		{loader: 'css-loader'},
		{loader: 'sass-loader'}
	]
}

关于css与js分离

为什么将css设计在js外部
由于项目是适用webpack打包构建工具进行构建项目的,其css的提取工具并不能将自由度完全交给开发者来进行构建,所以开发者无法随意的定义CSS生成文件的输出目录,文件名称以及构建过程等内容,所以通常我们把CSS样式单独设计出来,后期使用专门的CSS打包构建工具单独构建CSS这样可以更灵活的定义全局的样式系统

调试阶段的注意事项
在调试阶段,所有样式都只能使用index.scss进行加载,并且调试阶段采用的并不是构建之后的文件结构进行加载,所以调试阶段使用example项目仅仅是项目内部调试使用,后续还需要进行pack操作发布再进行调用

src/index 中模块编排代码

const {version, name} = require('../package.json')
// 将 ../packages/index.js中导出的模块合并汇总
import * as Components from '../packages'
// 将../package.js中的模块单独导出
export * from '../packages'
// 通过install函数自动注册每一个组件
const install = (app) => {
	Object.keys(Componets).forEach(key => {
		app.use(Components[key])
	})
}

// 导出组件库整体对象
export default {
	install,
	version,
	name
}

组件库生产环境

目前已经成功的将组件库的基本结构定义出来并在实际项目中使用,但我们之前一直在开发环境操作,demo项目中导入的也是src中源代码的内容。这种方式的组件库并不能满足真正的技术团队中跨项目分享组件的能力,我们最后也想ElementUI一样去构建组件库的安装包,所以需要对当前定义的生产环境配置。

生产环境的构建目的与应用开发的区别
生产环境的构建目的是输出一份不限于任何项目结构的静态组件资源,该资源支持全量和按需导入的方式提供给开发者们使用,这样开发者便无需将我们的组件库代码加载到其项目的src目录下,实现对项目的扩展同事又能提供灵活的运用方式。

组件库构建详解

打包构建项目配置
webpack.prod.js

const path = require('path')
const {VueLoaderPlugin} = require('vue-loader')

module.exports = {
	mode: 'production',
	devtool: 'source-map',
	entry: {
		index: './src/index.js',
		button: './packages/button',
		asside: './packages/aside',
		main: './packages/main',
		header: './packages/header',
		container: './packages/container'
	},
	output: {
		filename: '[name].js',
		path: path.resolve(__dirname, 'lib'),
		library: {
			name: 'TdUi',
			type: 'umd'
		},
		clean: true
	},
	module: {
		rules: [
			{
				test: /\.vue$/,
				use: {loader: 'vue-loader'}
			}
		]
	},
	externals: ['vue'],
	plugins: [new VueLoaderPlugin()]
}

package.json 加入命令

"build": "webpack --config webpack.prod.js --progress --color"

构建JS与构建CSS分离及其原因
在构建项目的过程中,我们发现所有的样式文件都不是在组件库内部代码引入的,所以构建项目后生成的组件库代码并没有css样式,这是因为为了极致的精简组件库,我们希望每一个歹毒的组件都会对应自己的单独样式,这样我们再构建组件库的时候功能代码和样式代码使用两种方式单独构建才能让组件库更加灵活的主观选择。
所以我们通常会在组件库项目中使用webpack之外的脚手架进行样式构建 比如gulp

使用gulp构建css及其原因
gulp是一套基于stream的构建系统,他由于配置简单,速度快 深受很多开发者的追捧,尤其是在webpack没有流行的时代,gulp相当于是当时打包构建工具的王者。在webpack出现后,gulp仍然因为其自身的特色在研发层面被大量使用。
之所以使用gulp来构建css样式是因为 webpack是一个JavaScript为核心的构建工具,所以在构建时虽然可以通过插件提取css但是必须基于JavaScript文件作为入口,所以这种操作是很受限制的,在构建UI框架的过程中使用gulp可以大大降低维护样式的成本。

安装依赖

npm i gulp gulp-cli -D
npm i gulp-sass gulp-sass-glob -D
npm i sass node-sass -D
npm i gulp-postcss postcss cssnano autoprefixer -D

配置
创建.browserslistrc文件并初始化内容 确保css可以补全兼容性前缀

> 0.25%
last 2 versions

创建gulpfile.js

const {src, dest, series} = require('gulp')
var sass = require('gulp-sass')(require('sass'))
var sassGlob = require('gulp-sass-glob')
var postcss = require('gulp-postcss')
var autoprefixer = require('autoprefixer')
var cssnano = require('cssnano')

function scss () {
  var plugins = [
    autoprefixer(),
    cssnano()
  ]
  return src('src/styles/*.scss')
    .pipe(sassGlob())
    .pipe(sass())
    .pipe(postcss(plugins))
    .pipe(dest('lib/styles'))
}

exports.default = series(scss)

package.json添加构建命令

    "build:stype": "gulp",

peerDependencies的作用

当项目构建步骤完成后,需要在项目的package.json中追加一些配置,这里最重要的配置就是peerDependencies

由于我们开发的框架是基于Vue框架运行的UI组件库,所以在安装组件库时必须确保已经安装了vue框架,为了确保开发者可以明确知道我们的UI库是依赖Vue框架的,这里我们可以通过peerDependencies指定的vue的依赖包,指定后该项目弱作为依赖被其他开发者安装,开发者在安装时控制台会提示该项目必须依赖其他安装包,

所以接下来package.json中配置的peerDependencies属性代码如下

{
	"peerDependencies": {
		"vue": "^3.2.31"
	}
}

本地发布和线上发布

本地发布

在本地打包前,我们需要继续修改package.json文件在其中加入如下内容(不要将注释放在package中)

{
	"main": "lib/index.js",
	"files": ["lib", "src", "packages", "example"]
}

设置后可以通过版本控制工具将版本提升一下再打包

npm version patch -m "构建本地测试包"
npm pack

按需引入
借助babel-plugin-component 我们可以只引入需要的组件,已达到减小项目体积的目的。
首先安装babel-plugin-component

npm i babel-plugin-component -D

然后将.babelrc修改为

{
	"presets": [["es2015", {"modules": false}]],
	"plugins": [
		[
			"component"
			{
				"libraryName": "element-ui",
				"styleLibraryName": "theme-chalk"
			}
		]
	]
}

在项目的babel.config.js文件中加入如下配置

module.exports = {
	presets: [
		'@vue/cli-plugin-babel/preset'
	],
	plugins: [
		[
			"component",
			{
				"libraryName": "tdui",
				"styleLibraryName": "styles"
			}
		]
	]
}

文档库构建

UI组件文档的设计要求

UI组件的文档设计风格已经越来越统一化,所有的UI文档大多遵循统一排版和菜单模式,每个菜单项对应一个固定的组件,该组件的说明需要包含组件的效果案例,组件的代码案例,组件的参数说明和组件的事件说明,还有在线调试功能。无论使用任何框架的生态,目前的文档创建规则大体都是这样的,我们可以参考ElementUI

UI组件文档的常用编写方式介绍

编写帮助文档最极简的方式就是直接使用MarkDown语法编写项目的readme.md说明文件,这种方式效率高,开发速度快,不过复杂功能的UI组件无法直接在MD文件中使用所以会导致文档不生动,提高学习门槛。

还有其他方式就是通过网页制作的方式直接通过我们的UI组件库创建一个新项目,通过编程的方式编写组件库的开发文档,这种方式可以非常生动的描绘组件库的文档,不过开发过程复杂,没有任何可复用的编码,所以性价比极低。

最后又很多开发者将文档需求整理后制作了一些前端快速构建文档项目的框架,这种框架即保留了markdown的高效率,又增加了编程式文档带来的生动效果,所以深受广大开发者的喜爱。

文档库常用工具

vuepress
官方文档http://caibaojian.com/vuepress/guide
优点是定制效果非常好,可以实现任何你想实现的文档效果,学习成本低,门槛低。

缺点是有些框架内部的坑,只能编写Vue框架的文档

storybook 文档工具
官方文档https://storybook.js.org
优点是支持很多主流的前端框架用来构建文档系统,自由度高功能及其强大
缺点是文档服务器为国际站,并没有中文版,阅读门槛高,访问要求网络链路好文章来源地址https://www.toymoban.com/news/detail-535183.html

到了这里,关于12 Web全栈 组件化设计(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web Component -- 即将爆发的原生的 UI 组件化标准

    Web Component 是一种用于构建 可复用用户界面组件 的技术,开发者可以创建自定义的 HTML 标签,并将其封装为包含逻辑和样式的独立组件,从而在任何 Web 应用中重复使用。 每个 Web Component 都具有自己的 DOM 和样式隔离,避免了全局 CSS 和 JavaScript 的冲突问题。它还支持自定义

    2024年02月03日
    浏览(32)
  • 拆解与重构:慕云游首页组件化设计

    在现代Web开发中,组件化设计是一种常见的开发模式,它有助于提高代码的可维护性、可重用性和可测试性。 通过将一个大型应用程序拆分为多个独立的组件,我们可以更加灵活地开发和维护网站。 本文将以慕云游首页为例,探讨如何通过组件化设计实现它的页面布局与交

    2024年02月13日
    浏览(27)
  • 前端工程化实战:React 模块化开发、性能优化和组件化实践

    前端工程化实战是指通过组织工作流程、使用工具和技术来提高前端开发效率和质量的一种方法。常见的前端工程化实践包括模块化开发、自动化构建、代码检查和测试、性能优化等。下面将简要介绍模块化开发、性能优化和组件化实践。 模块化开发 在 React 中实现模块化开

    2023年04月10日
    浏览(45)
  • 前端Vue入门-day03-用Vue实现工程化、组件化开发

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 生命周期 Vue 生命周期 和 生命周期的四个阶段  Vue 生命周期函数(钩子函数) 案例-create的应用 案例-mounted的应用 工程化开发 脚手架 Vue CLI 开发 Vue 的两种方式 基本介

    2024年02月15日
    浏览(38)
  • Android组件化架构开发--为什么要使用组件化?组件分层?组件路由的简单实现。

    1.1 单工程项目结构 一般我们都是一个业务建一个包 缺点: 各种业务代码混杂在同一个模块里,开发人员在开发、调测过程的效率越来越低,定位某个业务问题,需要在多个业务代码混合的模块中寻找和跳转。 需要了解各个业务的功能,避免代码的改动影响其它业务的功能

    2024年02月10日
    浏览(52)
  • 组件化开发之如何封装组件-react

    组件是构建用户界面的基本单元,它是一个独立的、可重用的、可组合的代码单元,用于表示UI的一部分。 人话:当谈论组件时,就像在搭积木一样,每个组件都是一个 独立的、可以重复使用 的代码块,用来构建网页或应用的各个部分。比如界面的布局,像按钮、文本输入

    2024年02月11日
    浏览(51)
  • Vue组件化开发--公共组件的封装

    目录 为什么要封装组件 应用场景 vue自己封装组件(局部、全局)  Vue组件的三要素 ①全局组件 1)方式:  2)示例: ②局部组件 1)方式: 2)示例: 命名规范:(注意) 脚手架vue-cli中的组件 父传子(props) 通过 $on 传递父组件方法 $parent获取父组件然后使用父组件中的

    2024年02月05日
    浏览(50)
  • Vue(组件化编程:非单文件组件、单文件组件)

    传统组件编写:不同的HTML引入不同的样式和行为文件 组件方式编写:组件单独, 复用率高(前提组件拆分十分细致)  理解为封装行为:html,css,js封装在一个文件中 解释模块化和组件化的区别: 组件化 :css,js,html三件套使用在同一部分的代码封装在一个组件中 模块化

    2024年02月01日
    浏览(45)
  • 组件化开发复习

    createApp 函数传入了一个对象 App ,这个对象其实本质上就是一个组件,也是我们应用程序的根组件 可以写为:  我们先来学习一下全局组件的注册:  全局组件需要使用我们全局创建的 app 来注册组件;  通过 component 方法传入组件名称、组件对象即可注册一个全局组件了;

    2024年02月15日
    浏览(46)
  • Android 组件化○

    1.组件化 组件化是指解耦复杂系统时,将多个功能模板拆分、重组的过程。在Android工程表现上就是把app按照其业务的不同,划分为不同的Module。 组件化架构的目的就是让每个业务模块变得相对独立,各个组件在组件模式下可以独立开发调试,集成模式下又可以集成到“app壳

    2023年04月20日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包