一、模块化相关规范
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. xd p4 WEB源码拓展

    WEB 源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中 WEB 源码有很多技术需要简明分析. 知识点 关于 WEB 源码目录结构 后台目录.模板目录.数据库目录 ...

  2. Dynamics 365 CRM 弹窗 打开自定义页面 Xrm.Navigation.navigateTo Open Web Resource

    在CRM中经常需要打开自定义的HTML界面,而且打开这个界面的时候需要模态窗体,阻止用户填写除了弹窗之外的东西,只能先填写窗体的内容: 这个时候很多人喜欢选择第三方的library去实现模态窗体,但是 ...

  3. Vue2 Axios简单封装

    /**axios封装 * 请求拦截.相应拦截.错误统一处理 */ import axios from 'axios';import QS from 'qs'; import { Toast } fro ...

  4. fragment加radio不可滑动

    public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { ...

  5. webstrom配置ES6 file watch没有生效

    参考了文章https://www.cnblogs.com/kiimi/p/8663467.html设置后,依然没有看到编译后的文件,然后设置了输出文件夹为当前项目,再重启webstrom就看到了--

  6. 解决appium-doctor报各种 cannot be found问题

    解决appium-doctor报各种 cannot be found问题 1.opencv4nodejs cannot be found.cmake --version 查看cmake是否安装已安装执 ...

  7. 「SOL」数树 (LOJ/WC2019)

    WC 果然还是 WC # 题面 有一张 \(n\) 个点的图,图上有红蓝两种边(可能重叠),且两种边各自形成一个 \(n\) 个点的树. 用 \(m\) 种颜色给图上的所有点染色.若 \(u,v\) ...

  8. Miller-Rabin素性判定算法

    Miller-Rabin素性判定算法是一种基于概率的判定算法,每次判定n是素数的正确性概率至少为75%,出错的概率小于25%. 如果对n进行k次素性检测,如果结果n为素数,那么n为合数的概率为1/(4 ...

  9. ethcat开发记录 二

    SOEM移植到stm32f407+LAN8720硬件上的注意点 1.LAN8720的PHY地址问题. 2.LAN8720芯片在上电后要对复位引脚操作. 3.使能LAN8720的混杂模式,在新的HAL库 ...

  10. elementUI table 数组中各项加逗号隔开

    js处理 //this.newTableData 数组 this.newTableData.map((item,index)=>{ //item.label 数组 if(item.label){ ...