一、模块化相关规范
1.1 模块化概述
传统开发模式的主要问题
命名冲突:多个JS文件之间,如果存在重名的变量,会发生变量覆盖问题
文件依赖:JS文件无法实现相互的引用
通过模块化解决上述问题
模块化就是把单独的一个功能封装到一个模块(文件)中,模块之间相互隔离,但是可以通过特定的接口公开内部成员,也可以依赖别的模块
模块化开发的好处:方便代码的重用,从而提升开发效率,并且方便后期的维护
1.2 浏览器端模块化规范
(1) AMD
Require.js
(2) CMD
Sea.js
1.3 服务器端的模块化规范
(1) CommonJS
模块分为单文件模块与包
模块成员导出: module.exports 和 exports
模块成员导入: require('模块标识符')
1.4 大一统的模块化规范 - ES6模块化
因此,ES6语法规范中,在语言层面上定义了 ES6 模块化规范,是浏览器端与服务器端通用的模块化开发规范
ES6模块化规范中定义:
每个 JS 文件都是一个独立的模块
导入模块成员使用 import 关键字
暴露模块成员使用 export 关键字
(1) Node.js 中通过babel体验 ES6 模块化
npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node
npm install --save @babel/polyfill
项目根目录创建文件 babel.config.js
babel.config.js 文件内容如右侧代码
const presets = [
["@babel/env", {
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1"
}
}]
];
module.exports = { presets };
通过npx babel-node index.js 执行代码
1.5 ES6 模块化的基本语法
(1) 默认导出 与 默认导入
默认导出语法 export default 默认导出的成员
默认导入语法 import 接收名称 from '模块标识符'
注: 在每个模块中,只允许使用唯一的一次 export default, 否则会报错!
(2) 按需导出 与 按需导入
按需导出语法 export let s1 = 10
按需导入语法 import { s1 } from '模块标识符'
注: 在每个模块中,可以使用多次按需导出
(3) 直接导入并执行模块代码
只想单纯执行某个模块中的代码,并不需要得到模块中向外暴露的成员
二、Webpack
2.1 当前 Web 开发面临的困境
文件依赖关系错综复杂
静态资源请求效率低
模块化支持不友好
浏览器对高级JavaScript特性兼容程度较低
etc...
2.2 webpack概述
webpack是一个流行的前端项目构建工具(打包工具), 可以解决当前web开发中所面临的困境。
webpack提供了友好的模块化支持,以及代码压缩混淆、处理js兼容问题、性能优化等强大的功能,从而让程序员把工作的中心放到具体的功能实现上,提高了开发效率和项目的可维护性。
目前绝大多数企业中的前端项目,都是基于webpack进行打包构建的
2.3 webpack 的基本使用
1. 创建列表隔行变色项目
(1) 新建项目空白目录,并运行 npm init -y 命令, 初始化包管理配置文件 package.json
(2) 新建 src 源代码目录
(3) 新建 src -> index.html 首页
(4) 初始化首页基本的结构
(5) 运行 npm install jquery -S 命令, 安装JQuery
(6) 通过模块化的形式,实现列表隔行变色效果
2. 在项目中安装和配置webpack
(1) 运行 npm install webpack webpack-cli -D 命令,安装 webpack 相关的包
(2) 在项目根目录中,创建名为 webpack.config.js 的 webpack 配置文件
(3) 在 webpack 的配置文件中,初始化如下基本配置:
module.exports = {
mode: 'development' // mode 用来指定构建模式
}
(4) 在 package.json 配置文件中的 scripts 节点下,新增 dev 脚本如下:
"scripts":{
"dev" : "webpack" // scripts 节点下的脚本,可以通过 npm run 执行
}
(5) 在终端运行 npm run dev 命令, 启动 webpack 进行项目打包
3. 配置打包的入口与出口
webpack 的 4.x 版本中默认约定:
打包的入口文件为 src -> index.js
打包的输出文件为 dist -> main.js
如果要修改打包的入口与出口,可以在 webpack.config.js 中新增如下配置信息:
const path = require('path') // 导入 node.js 中专门操作路径的模块
module.exports = {
entry: path.join(__dirname, './src/index.js'), // 打包入口文件的路径
output: {
path.join(__dirname, './dist'), // 输出文件的存放路径
filename: 'bundle.js' // 输出文件的名称
}
}
4. 配置webpack的自动打包功能
(1) npm install webpack-dev-server -D 命令, 安装支持项目自动打包的工具
(2) 修改 package.json -> scripts 中的 dev 命令如下:
"scripts":{
"dev": "webpack-dev-server" // scripts 节点下的脚本,可以通过npm run 执行
}
(3) 将 src -> index.html 中, script 脚本的引用路径, 修改为 "/bundle.js"
(4) 运行 npm run dev 命令, 重新进行打包
(5) 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果
注意
webpack-dev-server 会启动一个实时打包的 http 服务器
webpack-dev-server 打包生成的输出文件,默认放到了项目根目录中,而且是虚拟的、看不见的
5. 配置 html-webpack-plugin 生成预览页面
(1) 运行 npm install html-webpack-plugin -D 命令, 安装生成预览页面的插件
(2) 修改 webpack.config.js 文件头部区域, 添加如下配置信息:
// 导入生成预览页面的插件,得到一个构造函数
const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin({ // 创建插件的实例对象
template: './src/index.html', // 指定要用到的模板文件
filename: 'index.html' // 指定生成的文件的名称,该文件存在于内存中,在目录中不显示
})
(3) 修改 webpack.config.js 文件中向外暴露的配置对象,新增如下配置节点:
module.exports = {
plugins: [htmlPlugin] // plugins 数组是 webpack 打包期间会用到的一些插件列表
}
6. 配置自动打包的相关参数
// package.json
// --open 打包完成后自动打开浏览器页面
// --host 配置IP地址
// --port 配置端口
"scripts": {
"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
},
2.4 webpack 中的加载器
1. 通过loader打包非js模块
在实际开发过程中,webpack默认只能打包处理以 .js 后缀名结尾的模块,其他非 .js 后缀名结尾的模块,webpack默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错!
loader 加载器可以协助 webpack 打包处理特定的文件模块,比如:
less-loader 可以打包处理 .less 相关的文件
sass-loader 可以打包处理 .scss 相关的文件
url-loader 可以打包处理 css 中 url 路径相关的文件
2. loader的调用过程
2.5 webpack 中的加载器的基本使用
1. 打包处理 CSS 文件
npm install style-loader css-loader -D 命令,安装处理 css 文件的 loader
在 webpack.config.js 的 module -> rules 数组中,添加loader规则如下:
// 所有第三方文件模块的匹配规则
module:{
rules: [
{ test: /\.css$/, use: ['style-loader', 'css-loader']}
]
}
其中,test表示匹配的文件类型,use表示对应要调用的loader
注意:
(1) use 数组中指定的 loader 顺序是固定的
(2) 多个loader的调用顺序是:从后往前调用的
2. 打包处理 less 文件
npm install less-loader less -D 命令
在 webpack.config.js 的 module -> rules 数组中,添加loader规则如下:
// 所有第三方文件模块的匹配规则
module:{
rules: [
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader']}
]
}
 
3. 打包处理 scss 文件
npm install sass-loader node-sass -D 命令
在 webpack.config.js 的 module -> rules 数组中,添加loader规则如下:
// 所有第三方文件模块的匹配规则
module:{
rules: [
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader']}
]
}
4. 配置 postCSS 自动添加 css 的兼容前缀
npm install postcss-loader autoprefixer -D 命令
在项目根目录中创建postcss的配置文件 postcss.config.js, 并初始化如下配置
const autoprefixer = require('autoprefixer') // 导入自动添加前缀的插件
module.exports = {
plugins: [autoprefixer] // 挂载插件
}
在 webpack.config.js 的 module -> rules 数组中,修改 css 的 loader 规则如下:
module:{
rules: [
{ test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader']}
]
}
5. 打包样式表中的图片和字体文件
npm install url-loader file-loader -D 命令
在 webpack.config.js 的 module -> rules 数组中,修改 css 的 loader 规则如下:
module:{
rules: [
{ test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
use: 'url-loader?limit=16940'
}
]
}
其中 ? 之后是 loader 的参数项
limit 用来指定图片的大小,单位是字节(byte), 只有小于 limit 大小的图片,才会被转为 base64 图片
6. 打包处理js文件中的高级语法
安装babel转换器相关的包: npm install babel-loader @babel/core @babel/runtime -D
安装babel语法插件相关的包: npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
在项目根目录中,创建 babel 配置文件 babel.config.js 并初始化基本配置如下
module.exports = {
presets: ['@babel/preset-env'],
plugins:['@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties']
}
在 webpack.config.js 的 module -> rules 数组中,修改 loader 规则如下:
// exclude 为排除项, 表示 babel-loader 不需要处理 node_modules 中的 js 文件
module:{
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude:/node_modules/
}
]
}
三、Vue单文件组件
3.1 传统组件的问题和解决方案
1. 问题
1. 全局定义的组件必须保证组建的名称不重复
2. 字符串模板缺乏高亮,在 HTML 有多行的时候,需要用到丑陋的\
3. 不支持 CSS 意味着当HTML 和 JavaScript 组件化时,CSS 明显被遗漏
4. 没有构建步骤限制,只能使用HTML和ES5 JavaScript,而不能使用预处理器(Babel)
2. 解决方案
针对传统组件的问题, Vue 提供了一个解决方案 - 使用 Vue 单文件组件
 
3.2 Vue 单文件组件的基本用法
单文件组件的组成结构
template 组建的模板区域
script 业务逻辑区域
style 样式区域
3.3 webpack中配置vue组件的加载器
npm install vue-loader vue-template-compiler -D
在 webpack.config.js 的 module -> rules 数组中,修改 vue-loader 规则如下:
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
module:{
rules: [
// ...其他规则
{ test: /\.vue$/, use: 'vue-loader'}
]
},
plugins:[
//... 其他插件
new VueLoaderPlugin() // 确保引入这个插件
]
}
 
3.4 在webpack 项目中使用 vue
npm install vue -S 安装 vue
在 src -> index.js 入口文件中, 通过 import Vue from 'vue' 来导入 vue 构造函数
创建 vue 的实例对象, 并指定要控制的 el 区域
通过 render 函数渲染 App 根组件
// 1. 导入 Vue 构造函数
import Vue from 'vue'
// 2. 导入 App 根组件
import App from './components/App.vue'
const vm = new Vue({
// 3. 指定 vm 实例要控制的页面区域
el:'#app',
// 4. 通过 render 函数,把指定的组件渲染到 el 区域中
render: h => h(App)
})
 
3.5 webpack 打包发布
上线之前需要通过webpack将应用进行整体打包,可以通过 package.json 文件配置打包命令
// 在package.json 文件配置 webpack 打包命令
// 该命令默认加载项目根目录中的 webpack.config.js 配置文件
"scripts": {
// 用于打包的命令
"build": "webpack -p",
// 用于开发调试的命令
"dev": "webpack-dev-server --open --host 127.0.0.1 --port 3000",
}
四、Vue脚手架
4.1 Vue脚手架的基本用法
Vue 脚手架用于快速生成 Vue 项目基础架构
使用步骤
1. 安装 3.x 版本的 Vue 脚手架
npm install -g @vue/cli
安装过后通过 vue -V 查看是否安装成功
 
基于 3.x 版本的脚手架创建vue项目
// 1. 基于 交互式命令行 的方式, 创建 新版 vue 项目
vue create my-project
通过 上下箭头 选择,通过 空格键 选中
Babel、Router、Linter / Formatter
(1) history router : no
(2) linter: Standard config
(3) lint on save
(4) In dedicated config files
 
// 2. 基于 图形化界面 的方式, 创建 新版 vue 项目
vue ui
// 3. 基于 2.x 的旧模板,创建 旧版 vue 项目
npm install -g @vue/cli-init
vue init webpack my-project
4.2 Vue脚手架生成的项目结构分析
node_modules 依赖包目录
public 静态资源目录(首页、图标)
src 组件的源代码目录
assets 可能会用到的资源
components 组件化时,CSS
views 视图组件
App.vue 根组件
main.js 打包入口文件
router 路由配置
eslintrc.js
babel.config.js Babel 的配置文件
4.3 Vue脚手架的自定义配置
(1) 通过 package.json 配置项目
// 必须是符合规范的 json 语法
"vue": {
"devServer": {
"port": 8888,
"open": true
}
}
注: 不推荐使用这种配置方式。因为 package.json 主要用来管理包的配置信息;为了方便维护,推荐将 vue 脚手架相关的配置,单独定义到 vue.config.js 配置文件中
(2) 单独的配置文件配置项目 (推荐)
在项目根目录创建文件 vue.config.js
在该文件中进行相关配置,从而覆盖默认配置
// vue.config.js
module.exports = {
devServer: {
port: 8888
}
}
五、Element-UI的基本使用
Element-UI: 一套为开发者、设计师和产品经理准备的基于Vue 2.0 的桌面端组件库
地址: http://element-cn.eleme.io/#/zh-CN
1. 基于命令行方式手动安装
安装依赖包 npm install element-ui -S
导入 Element-UI 相关资源
// 在 main.js 导入组件库
import ElementUI from 'element-ui';
// 在 main.js 导入组件相关样式
import 'element-ui/lib/theme-chalk/index.css';
// 在 main.js 配置 Vue 插件
Vue.use(ElementUI);
2. 基于图形化界面自动安装
运行 vue ui 命令, 打开图形化界面
通过 Vue 项目管理器,进入具体的项目配置面板
点击 插件 -> 添加插件,进入插件查询面板
搜索 vue-cli-plugin-element 并安装
配置插件,实现按需导入,从而减少打包后项目的体积

7.webpack与vue-cli的更多相关文章

  1. [转]Vue CLI 3搭建vue+vuex 最全分析

    原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...

  2. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  3. 使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)

    使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development.production) --mode 指定环境模式 ...

  4. axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器

    1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...

  5. vue cli 3 & webpack-merge & webpack 3 & bug

    vue cli 3 & webpack-merge & webpack & bug bug webpack-merge & bug webpack-merge ??? ...

  6. @vue/cli 3.x项目脚手架 webpack 配置

    @vue/cli  是一个基于 Vue.js 进行快速开发的完整系统. @vue/cli   基于node服务  需要8.9以上版本 可以使用 nvm等工具来控制node版本  构建于 webpack ...

  7. 手把手教你如何安装使用webpack vue cli

    1.安装node.js:https://nodejs.org/en/download/(看电脑的系统是多少位下载相应版本) 我下载的是Windows Installer(.msi) x64 2.打开c ...

  8. Vue CLI 3.0脚手架如何在本地配置mock数据

    前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...

  9. vue cli 3

    介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vue/cli + @vue/cli-service-global 快 ...

  10. @Vue/Cli 3 Invalid Host header 检测关闭

    Invalid Host header 在本地开发等一般情况下,无论是 local,还是 ip,或者是 0.0.0.0,在 cli 中都默认为合法的,但是有些场景可能会被不支持,比如远程开发,或者是云 ...

随机推荐

  1. 1.java 开始

    WelloWorld 随便新建一个文件夹,存放代码 新建一个java文件 编写代码 编译javac java文件,生成一个class文件 运行class文件,java class 可能遇到的情况 每个 ...

  2. javascript【应用】debounce和throttle

    debounce防抖 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时:典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时. <div id=& ...

  3. Github搜索优质项目方法

    [转载]:https://www.zhihu.com/question/20084458 搜索结果会显示非常多的开源项目,简直让你应接不暇,无从下手,很多小伙伴搜到这一步就放弃了,因为项目太多了,根本 ...

  4. PI ID关联IR配置问题

    例如问题:无数据 1.软件组织生成的id与ID配置id不一致(由于删除软件组织重新创建) 1.1找到需要修改位置 1.2 IR查询id 1.3 替换指定需要插入'-'

  5. apk反编译工具--dex2jar

    dex2jar 2.1 https://github.com/pxb1988/dex2jar/releases 链接: https://pan.baidu.com/s/1ZU16mPE_QNhzWxF ...

  6. 方法综合练习:out、params、ref

    using System; namespace ConsoleApp1 { class Program { /// <summary> /// 求两个参数之间的最大值 /// </s ...

  7. DB2日常维护操作

    一. DB2日常维护操作 1.数据库的启动.停止.激活 db2 list active databases db2 active db 数据库名 db2start --启动 db2stop [forc ...

  8. Java poi导入Excel

    public MessageTo insertExcel(MultipartFile file) { try { InputStream is = file.getInputStream(); Wor ...

  9. vue 动态路由添加的问题

    vue3中在router/index.js中 import { createRouter, createWebHistory } from 'vue-router'; import store fro ...

  10. vue后台管理系统——订单管理模块

    电商后台管理系统的功能--订单管理模块 1. 订单管理概述 订单管理模块用于维护商品的订单信息, 可以查看订单的商品信息.物流信息,并且可以根据实际的运营情况对订单做适当的调整. 2. 订单列表 在c ...