首页 > 编程语言 >转载:ElementUI源码系列一 - 从零搭建项目架构,项目准备、项目打包、项目测试流程

转载:ElementUI源码系列一 - 从零搭建项目架构,项目准备、项目打包、项目测试流程

时间:2022-10-14 18:00:14浏览次数:59  
标签:文件 vue ElementUI 项目 js webpack 源码 组件

创建入口文件

首先,在你的电脑里寻找一个风水宝地,创建一个文件夹,通过 npm init -y
,初始化 package.json
文件;创建 src
文件夹,在它下面创建 src/index.js
入口文件,它是我们项目的总入口文件。

 

 

 

创建第一个组件

其次,我们来创建项目的第一个组件,先在 src
文件夹 同级 下创建 packages
文件夹,它后续会存放我们项目中的每一个组件源码;再创建第一个组件 button
的结构目录,具体如下:

 

 

 后续每个组件都会在 package
文件夹下有对应名称的文件夹,它主要由一个 index.js
主文件,和 src
文件夹组成,这和 element-ui 源码结构是一样的,都是基操,就不多说了,看着建就完事。

编写入口文件与组件内容

入口文件(src/index.js
)的工作就是引入注册所有组件,并对外提供 install()
方法,供给 Vue.use()
方法使用。

import Button from '../packages/Button/index.js'

const components = [Button]

const install = (Vue) => {
    components.forEach(component=>{
        Vue.component(component.name, component) // 每个组件需提供name属性
    })
}

export default {
    install,
    Button
}

  

button.vue
组件我们先简单随便写点东西。

<template>
  <div>
    第一个button组件
  </div>
</template>

<script>
export default {
    name: 'ElButton'
}
</script>

  

button/index.js
组件名称我们先按 element-ui
本身的名称来,当然,你也能随便改,这不是重点,代码如下:

import ElButton from './src/button.vue' // .vue后缀不可省略

ElButton.install = (Vue) => {
    Vue.component(ElButton.name, ElButton);
}

export default ElButton

  

在编写 button/index.js
文件的时候,有两个需要注意的地方:一就是文件后缀的问题,因为我们项目是从零开始搭建的,没有任何其他辅助工具,所以在引入一个文件的时候,必须提供一个完整的路径。很多时候,我们已经习惯了引入文件时,省略 .js
、 .vue
和 .ts
等后缀,但这不是一个与生俱来的“能力”,那是因为我们有各种 cli
工具的集成辅助,当然,后面我们集成 webpack
后也能配置该能力;第二个需要注意的地方是在组件身上挂载 install()
方法,它的作用提供组件的 按需加载 能力,后续文章会写到,可以先不管。

打包

通过上面步骤,项目的准备工作就做完了,下面需要对项目进行打包操作,我们和 ElementUI
一样采用 webpack
来打包。

引入webpack

我们会用到两个 webpack
相关的包,为了保证不会出现不必要的麻烦,你可以先和我保持一样的版本:

安装命令,在项目根目录下执行:npm install [email protected] [email protected] -D 或者 yarn add [email protected] [email protected] -D

之后在项目根目录下,新建 build
文件夹,它存放项目打包的一切相关配置文件,再创建 build/webpack.common.js
配置文件,如下:

 

 

 编写 webpack
的基本配置:

const path = require('path')

module.exports = {
    mode: 'production',
    entry: './src/index.js',
    output: {
        path: path.resolve(process.cwd(), './lib'),
        filename: 'element-ui.common.js',
        libraryTarget: 'commonjs2', // 将库的返回值分配给module.exports
    }
}

  

处理 .vue文件

因为我们编写的组件用的是 .vue
后缀的文件, webpack
可不认识这类型的文件,webpack
只识别 .js
与 .json
文件,其他所有类型的文件,都需要找到相关的 loader
处理后才能交给 webpack

loader
是 webpack
的核心内容,这里就不多讲了,不懂的可以先找些文章瞅瞅)

处理 .vue
文件我们主要会用到两个包:npm install [email protected] [email protected] -D 或者 yarn add [email protected] [email protected] -D

编写配置文件:

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

module.exports = {
    mode: 'production',
    entry: './src/index.js',
    output: {
        path: path.resolve(process.cwd(), './lib'),
        filename: 'element-ui.common.js',
        libraryTarget: 'commonjs2', // 将库的返回值分配给module.exports
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    compilerOptions: {
                        preserveWhitespace: false, // 打包后清除多余的空格
                    }
                }
            }
        ]
    },
    plugins: [
        new VueLoaderPlugin()
    ]
}

  

配置命令行打包

写好配置文件后,我们再配置打包命令,方便后续的打包工作。

package.json 文件内容如下:

{
  "name": "ele_study",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack --config build/webpack.common.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "vue-loader": "15.7.0",
    "vue-template-compiler": "2.6.14",
    "webpack": "4.14.0",
    "webpack-cli": "3.0.8"
  }
}

  

执行打包命令

配置完打包命令后,我们执行它(npm run build 或者 yarn build),在项目的根目录下的 lib文件夹应该可以生成一个 element-ui.common.js文件。

 

 

 

测试

做到这里到这里,项目前期的工作就做完了,下面我们步入测试阶段,写了那么多,是骡子是马要拉到页面上遛遛。

下面会介绍两种测试项目的方式:

方式一:项目打包成本地npm包

    • 修改 package.json
      文件的 main
      配置项,改成打包后生成的文件。
{
  "name": "ele_study",
  "version": "1.0.0",
  "description": "",
  "main": "lib/element-ui.common.js",
  "scripts": {
    "build": "webpack --config build/webpack.common.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "vue-loader": "15.7.0",
    "vue-template-compiler": "2.6.14",
    "webpack": "4.14.0",
    "webpack-cli": "3.0.8"
  }
}

  

执行 npm pack 或者 yarn pack 命令,生成 .tgz包。

 

 

下载本地的 npm

包到实际项目中使用。我们先随便初始化一个 Vue项目,在D:\vuepro下执行

vue create uitest(项目名,可以随意取)

然后我们在新项目中下载我们刚刚生成的本地 npm包。

npm install D:\vuepro\ele_study\ele_study-v1.0.0.tgz(本地放置tgz包的全路径)

下完后,你的 Vue项目的 package.json文件会多一个包,之后就能和正常下载的 npm 包一样使用了。

 

 

 在项目的 main.js文件中全局导入。

import juejinElementUI from 'juejin-element-ui';
Vue.use(juejinElementUI);

  

在页面中具体使用。

<template>
  <div id="app">
    <el-button></el-button>
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

  

能看到组件被正常识别,就大功告成了。这过程还是比较容易出错,多注意是否有重新打包、重新下载、重新启动项目等。٩(๑❛ᴗ❛๑)۶

方式二:html文件快速测试.vue文件

创建一个 .html文件。我们在项目中创建 examples文件夹,在它下面创建一个 .html文件。

 

 

主要是借用 http-vue-loader 包来处理 .vue文件,对它不熟悉的小伙伴可以自行了解一下。

把 button.vue文件 export default改成 module.exports = {}形式。

<template>
    <div>第一个组件-button组件</div>
  </template>
  
  <script>
  // export default {
  module.exports = {
    name: 'ElButton'
  };
  </script>
  
  <style scoped>
  </style>

  

在index.html根目录启动一个http服务器,访问index.html即可

 

原文链接:https://www.modb.pro/db/467535

标签:文件,vue,ElementUI,项目,js,webpack,源码,组件
From: https://www.cnblogs.com/fanqieyuanzi/p/16792488.html

相关文章

  • 项目概述、部署数据库服务mysql、配置网站服务、测试配置
    Project3_day01知识点:一、准备数据库服务器二、搭建数据库服务器三、配置MySQL主从同步四、配置读写分离服务器五、配置数据库服务器六、配置网站服务器七、测试配......
  • 数据库第十三次作业 事务管理【带源码】
    目录​​一、新建数据库​​​​二、事务的提交​​​​ 1.事务的隔离级别​​​​1.1脏读 ​​​​1.2演示脏读 ​​​​1.3设置b账户中事务的隔离级别 ​​​​1.4.验......
  • 数据库第十次作业-视图【带源码】
    目录​​1.创建视图“view_info”,查询所有员工姓名、员工联系电话、车间地址、车间主任姓名、主任联系方式​​​​2.查看“view_info”视图字段信息​​​​3.创建视图“v......
  • Jenkins 项目管理、构建分发服务器、自动化上线
     Jenkins项目管理、构建分发服务器、自动化上线永久关闭防火墙和selinux[root@gitlab~]#systemctlstopfirewalld[root@gitlab~]#systemctldisablefirewalld[ro......
  • Vue3 +elementUI + wangEditor 富文本编辑器
    哎呀,一个富文本编辑器折腾了我好久啊,刚开始找的就是wangEditor,但是上传图片的调接口,我就寻思找个简单的,后来换了quill可以不调接口上传图片,但是v-model绑定不了,而且一直......
  • 项目1 数据库基础知识【简单易懂】
    目录​​1.数据库是什么?​​​​2.用户可以对数据库执行什么操作?​​​​3.什么是数据库管理系统?​​​​4.什么时候会用到数据库应用程序?​​​​5.一个数据库服务器可以管......
  • 预览项目中所有文章中图片
    注意:不要在赋值之后(列表渲染)读取操作节点,因为异步的数据获取需要时间,节点来不及渲染到页面就去读取,是读取不到的-朱龙旭看世界-博客园(cnblogs.com) ......
  • 项目4 MySQL数据表的检索总结
    目录​​【任务4.1】查询时选择列​​​​1.基本查询语句​​​​2,检索所有列​​​​3.检索指定列​​​​(1)检索单个字段​​​​(2)检索多个字段​​​​(3)定义别名​​​......
  • 第八周 项目5:创建与使用视图
    目录​​一、课堂内容​​​​1.创建视图​​​​2.使用视图​​​​3.删除视图​​​​4.查看视图字段信息​​​​5.查看视图创建信息​​​​6.修改视图​​​​7.创建或......
  • 数据库第八次作业-复习作业(工厂项目)【带源码】
    目录​​什么是数据库?​​​​用户可以对数据库执行什么操作?​​​​什么是数据库管理系统?​​​​你个数据库管理系统可以管理多少个数据库?​​​​那一个数据库有多少张表......