源码系列文章很长时间没有更新,一是在考虑文章用什么方式写质量会更高,用什么方式总结更易于扩展和总结知识点,加上工作、看书、健身占用的时间比较多所以也没时间去整理。最近在网上看到一篇文章感觉这种方式不错,刚好ant Desgin of vue发布,就想试试用这种方式写文章,而且通过画思维导图来整理整个知识点:



还没有整理完,里面经常会有打问号的解释是因为要看到后面才能知道这个组件的用途。后续会将其补充完整。还想记录下我在不熟悉源码结构下怎么牵出一个线头顺藤摸瓜的属性整个项目。

把ant Desgin of Vue源码下载后大概看了下目录,可能最容易知道的是components文件夹是组件的源码,其他文件就知道里面是什么,不用太着急知道其他文件的内容。我拿到项目会先看package.json配置文件,主要是因为里面记录项目的一些指令。



其他指令不太好理解但红色框内的指令经过很好理解,上面框内是本地调试运行的指令,下面框内是打包指令。

运行指令:npm install 安装依赖的包

然后在运行 npm start

可以看到这个页面



可以知道本地调试是能看到ant Desgin of Vue官网api页面,然后想到看webpack.config.js配置文件中配置的入口文件。

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const merge = require('webpack-merge');
const baseWebpackConfig = require('./webpack.base.config'); module.exports = merge(baseWebpackConfig, {
mode: 'development',//配置模式
output: {
path: path.resolve(__dirname, './dist'),//输出路径
publicPath: '/',//路径前缀
filename: 'build.js',//文件名称
},
module: {
rules: [//解析less、css文件
{
test: /\.less$/,
use: [
{ loader: 'vue-style-loader' },
{
loader: 'css-loader',
options: { sourceMap: true },
},
{ loader: 'less-loader', options: { sourceMap: true, javascriptEnabled: true } },
],
},
{
test: /\.css$/,
use: ['vue-style-loader', 'css-loader'],
},
],
},
devServer: {//测试环境的配置
port: 3000,//端口号
host: '0.0.0.0',//用ip可以访问
historyApiFallback: {//当使用 HTML5 History API 时,任意的 404 响应都可能需要被替代为 index.html
rewrites: [{ from: /./, to: '/index.html' }],
},
disableHostCheck: true,//设置为true时,此选项会绕过主机检查。
headers: { 'Access-Control-Allow-Origin': '*' },//在所有响应中添加首部内容
},
performance: {//通过这些选项,您可以控制webpack如何通知您超出特定文件限制的资产和入口点。
hints: false,//关闭提示
},
devtool: '#source-map',//此选项控制是否生成,以及如何生成 source map。
plugins: [//打包过程用到的插件
new HtmlWebpackPlugin({
template: 'site/index.html',//设置生成html模板
filename: 'index.html',//输出的文件名称
inject: true,//当传递true或body时,所有javascript资源都将放在body元素的底部。头将把脚本放在头元素中
}),
],
});

以上注释来自于《webpack中文文档》

引用的包

  • path

path 模块提供用于处理文件路径和目录路径的实用工具

(from:《Node.js v10.15.3 文档》

  • html-webpack-plugin

HtmlWebpackPlugin简化了HTML文件的创建,以便为您的 webpack bundle 提供服务。这对于被更改文件的文件名中包含每次编译哈希(hash) 的webpack bundle尤其有用。您可以让插件为您生成一个HTML文件,使用lodash templates提供您自己的模板,或使用自己的加载器(loader)。

(from:《webpack 2.2中文文档》

template设置生成html模板;filename输出的文件名称;inject当传递true或body时,所有javascript资源都将放在body元素的底部,头将把脚本放在头元素中。

  • webpack-merge

合并公共配置

(参考文章:《webpack》《webpack-merge - Merge》

代码中引入了webpack.base.config.js文件对象合并配置对象,在来看webpack.base.config.js代码

const path = require('path');
const hljs = require('highlight.js');
const Token = require('markdown-it/lib/token');
const cheerio = require('cheerio');
const WebpackBar = require('webpackbar');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const getBabelCommonConfig = require('./antd-tools/getBabelCommonConfig');
const babelConfig = getBabelCommonConfig(false); babelConfig.plugins.push(require.resolve('babel-plugin-syntax-dynamic-import')); const fetch = (str, tag, scoped) => {
}; /**
* `{{ }}` => `<span>{{</span> <span>}}</span>`
* @param {string} str
* @return {string}
*/
const replaceDelimiters = function(str) {
}; /**
* renderHighlight
* @param {string} str
* @param {string} lang
*/ const renderHighlight = function(str, lang) {
}; const md = require('markdown-it') const vueLoaderOptions = { };
module.exports = {
mode: 'production',//配置模式
entry: {
index: [`./site/${process.env.ENTRY_INDEX || 'index'}.js`],//入口文件
},
module: {
rules: [
{
test: /\.md$/,//解析md文件
use: [
{
loader: 'vue-loader',
options: vueLoaderOptions,
},
{
loader: 'vue-antd-md-loader',
options: Object.assign(md, {
wrapper: 'div',
raw: true,
}),
},
],
},
{
test: /\.vue$/,//解析vue文件
loader: 'vue-loader',
options: vueLoaderOptions,
},
{
test: /\.(js|jsx)$/,//解析js|jsx文件
loader: 'babel-loader',
exclude: /node_modules/,
options: babelConfig,
},
{
test: /\.(png|jpg|gif|svg)$/,//解析png|jpg|gif|svg文件
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]',
},
},
],
},
resolve: {//配置模块如何解析
modules: ['node_modules', path.join(__dirname, '../node_modules')],//告诉 webpack 解析模块时应该搜索的目录。绝对路径和相对路径都能使用,但是要知道它们之间有一点差异。
extensions: ['.js', '.jsx', '.vue', '.md'],//自动解析的扩展
alias: {//创建 import 或 require 的别名,来确保模块引入变得更简单
vue$: 'vue/dist/vue.esm.js',
antd: path.join(__dirname, 'components'),
'ant-design-vue': path.join(__dirname, 'components'),
'@': path.join(__dirname, ''),
},
},
plugins: [new VueLoaderPlugin(), new WebpackBar()],//打包过程用到的插件,应该使用的额外的解析插件列表
};

因为有很多是插件的配置,为了让结构好理解,把配置的部分删除了,rules用到插件解析会后面单独篇幅。

引用的包

在代码中index: [./site/${process.env.ENTRY_INDEX || 'index'}.js],//入口文件知道入口文件是在site文件夹下的index.js文件,下一篇来看site文件夹里的内容。

Ant Design Vue项目解析-前言的更多相关文章

  1. Ant Design Vue Pro 项目实战-项目初始化(一)

    写在前面 时间真快,转眼又是新的一年.随着前后端技术的不断更新迭代,尤其是前端,在目前前后端分离开发模式这样的一个大环境下,交互性.兼容性等传统的开发模式已经显得有些吃力.之前一直用的是react,随 ...

  2. Ant Design Vue select下拉列表设置默认值

    在项目中需要为Ant Design Vue 的 select 组件设置一个默认值,如下图所示的状态下拉选择框,默认选择全部 代码如下: <a-select v-model="query ...

  3. 基于Ant Design Vue封装一个表单控件

    开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...

  4. Ant Design Pro项目打开页设为登录或者其他页面

    Ant Design Pro项目打开页设为登录或者其他页面 一.打开页设为登录页 首先找到utils包中的authority文件,在该文件中找到如下代码: export function getAut ...

  5. 使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换

    使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换 需求: 日历区分交易日.非交易日 可以切换面板查看整年交易日信息 可以在手动调整交易日.非交易日 演示实例 序--使用软 ...

  6. 使用npm安装 Ant Design Vue 时报错—ant-design-vue@latest(sha1-qsf / gCIFcRYxyGmOKgx7TmHf1z4 =)seems to be corrupted.

    安装 Ant Design Vue 时报错: npm install ant-design-vue --save ant-design-vue @ latest(sha1-qsf / gCIFcRYx ...

  7. Vue3学习(二)之集成Ant Design Vue

    一.集成Ant Design Vue npm install ant-design-vue@2.0.0-rc.3 --save 兼容性 Ant Design Vue 2.x 支持所有的现代浏览器. 如 ...

  8. Vue项目解析

    各个文件夹 node_modules:用来放环境依赖 public:用来放公共资源,里面的index.html文件,就是初始的挂载点.被app.vue给取代了. src:放各种资源的. assets: ...

  9. Vue 2.x折腾记 - (17) 基于Ant Design Vue 封装一个配置式的表单组件

    前言 写了个类似上篇搜索的封装,但是要考虑的东西更多. 具体业务比展示的代码要复杂,篇幅太长就不引入了. 效果图 2019-04-25 添加了下拉多选的渲染,并搜索默认过滤文本而非值 简化了渲染的子组 ...

随机推荐

  1. BUPT 2012复试机考 4T

    题目描述 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节.传输层的TCP协议数据段的头部格式如下:  ...

  2. Android-studio 连接真机 调试weex项目

    1.选择项目 platforms  /  android 2.创建虚拟机(AVD) (1)点击 AVD Manager (2) 点击  Create Virtual Device 最后发现 CPU 不 ...

  3. C#文件的压缩和解压(ZIP)使用DotNetZip封装类操作zip文件(创建/读取/更新)实例

    需要引用Ionic.Zip命名空间 DLL下载地址在这里:http://dotnetzip.codeplex.com/ 文件压缩 /// <summary> /// 压缩ZIP文件 /// ...

  4. The user's guide what comes in the kernel Documentation directory

    The Linux IPMI Driver --------------------- Corey Minyard <minyard@mvista.com> <minyard@acm ...

  5. 用JAVA编写浏览器内核之实现javascript的document对象与内置方法

    原创文章.转载请注明. 阅读本文之前,您须要对浏览器怎样载入javascript有一定了解. 当然,对java与javascript本身也须要了解. 本文首先介绍浏览器载入并执行javascript的 ...

  6. Redis相关知识

    Redis 存储的五种 字符串类型:string 一个String类型的value最大可以存储512M String是最常用的一种数据类型,普通的key/value存储. 散列类型:  hash 键值 ...

  7. MD5介绍及Windows下对文件做md5校验。

    MD5介绍参考百度百科: 摘要如下: MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性. 一个散列函数,比如 MD5,是一个将任意长度的数据字符串转化成短的固定长度 ...

  8. 2016/06/16 phpexcel

      程序部分   require_once './phpexcel/PHPExcel.php';   // 首先创建一个新的对象  PHPExcel object $objPHPExcel = new ...

  9. SSM整理笔记1——SSM网站初步功能设计

    前言 因为公司里一直用Hibernate,但是现在Mybatis是趋势,所以搭建一个Mybatis的网站框架,目的是:1摸清其功能特点,2为以后的项目增加框架选择(以前只用hibernate或者Spr ...

  10. java8--面向对象 下(疯狂java讲义3) 复习笔记

    1.如果一个包装类和一个基本类型比较大小,或者是两个基本类型进行比较大小,直接用==就好: 如果是两个包装类进行比较大小,那么使用equals(),返回值是true,false,或者使用Xxx.com ...