Webpack
网页中常用的静态资源
网页中引用静态资源多了有什么问题
加载速度慢,因为有很多二次请求
要处理错综复杂的依赖关系
webpack
webpack: 前端项目构建工具,基于node.js开发的前端工具
文档:https://www.webpackjs.com/
下载:npm i webpack -g
在项目中打包js: webpack 要打包的文件路径 打包好的输出文件路径 版本高,
webpack 要打包的文件路径 -o 打包好输出的文件路径
配置文件: webpack.config.js
var path = require('path');
// 配置之后 就不用使用 webpack ./src/main.js -o ./disk/bundle.js 来打包文件了,直接使用 webpack
// 工作机制
// 1.webpack 发现,没有通过命令的方式 指定入口和出口
// 2.会去文件根目录查找 webpack.config.js 文件
// 3.当找到这个文件之后,webpack 会执行解析这个配置文件,得到配置文件中导出的对象
// 4.webpack 拿到对象后就拿到了配置文件中的入口和出口,然后进行打包构建
// 暴漏一个对象
module.exports = {
mode: 'production',
// 在对象中定义一个入口和出口
// 入口文件就是要打包的那个文件
entry: path.join(__dirname, './src/main.js'),
// 出口文件是打包之后要使用的文件
output: {
path: path.join(__dirname, './disk'), // 指定打包文件输出到哪个目录
filename: 'bundle.js' // 指定输出文件名称
}
};
bug锦集
bug
// 在使用webpack 打包的时候
// We will use "npm" to install the CLI via "npm install -D".
// Do you want to install 'webpack-cli' (yes/no): yes
// Installing 'webpack-cli' (running 'npm install -D webpack-cli')...
// 选哟安装 webpack-cli
// npm install webpack-cli -g
==========================================================
// 当 npm init -y 失败,报错 npm ERR! Invalid name时
// 在"name"字段中不允许使用 大写字母、空格和中文 package.json。文件名字不能是中文
==========================================================
// 当 webpack .\src\main.js .\disk\bundle.js 报错
// ERROR in multi ./src/main.js ./disk/bundle.js Module not found: Error: Can't resolve '.\disk\bundle.js' in 'D:\HBuilder\sublime\vue\05\05webpack' @ multi ./src/main.js ./disk/bundle.js main[1]
// 把命令更换为 webpack src\main.js -o disk\bundle.js
==========================================================
// 执行打包时遇到警告
// WARNING in configuration
// The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enabl
// e defaults for each environment.
// You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/
//版本高,需要配置
// 这是没有配置环境的原因!
//
// 解决方案:在package.json文件中添加.
// "scripts": {
// "dev": "webpack --mode development",
// "build": "webpack --mode production"
// },
// 在webpack中写
// mode: 'production',
==========================================================
webpack.config.js 一定要在根目录xia
报错
ERROR in Entry module not found: Error: Can't resolve './src' in 'D:\HBuilder\sublime\vue\06\01-webpack-demo'
ERROR in multi (webpack)-dev-server/client?http://localhost ./src
Module not found: Error: Can't resolve './src' in 'D:\HBuilder\sublime\vue\06\01-webpack-demo'
@ multi (webpack)-dev-server/client?http://localhost ./src main[1]
安装webpack-dev-server
安装: npm i webpack-dev-server -D 只能安装在项目中,不是全局安装
配置:
在 package.json 中配置
在 webpack.config.js 中配置
首先在 packsge.json 中 配置 “start”: “webpack-dev-server”
open: true, // 自动打开浏览器
port: 3000, // 更改端口号为 3000
contentBase: ‘src’, // 默认打开src
配置热更新
var webpack = require(‘webpack’); // 配置热更新第二步
module.exports = {
mode: ‘production’,
// 在对象中定义一个入口和出口
// 入口文件就是要打包的那个文件
entry: path.join(__dirname, ‘./src/main.js’),
// 出口文件是打包之后要使用的文件
output: {
path: path.join(__dirname, ‘./disk’), // 指定打包文件输出到哪个目录
filename: ‘bundle.js’ // 指定输出文件名称
},
devServer: {
open: true, // 自动打开浏览器
port: 3000, // 更改端口号为 3000
contentBase: ‘src’, // 默认打开src
hot: true // 配置热更新第一步
},
plugins: [
new webpack.HotModuleReplacementPlugin() // new 一个热更新模块对象 第三步
]
};
html-webpack-plugin
安装: npm i --save-dev html-webpack-plugin 在内存中生成htm页面
使用:
在webpack.config.js中配置
// 导入 html-webpack-plugin 在内存中生成 html 页面
var htmlWebpackplugin = require('html-webpack-plugin');
// 只要是插件,就要在plugins中配置
plugins:
// 配置 html-webpack-plugin
new htmlWebpackplugin({ // new 一个在内存中生成 HTML 页面的插件
template: path.join(__dirname, './src/webpackNew.html'), // 指定模板页面,根据指定页面的路径
filename: 'index.html' // 生成的内存中的页面
})
]
作用:
// 1.可以在内存中生成 html 页面
// 2.自动把打包好的 js 文件追加到 html 页面中
配置引用css ——style-loader , css-loader
webpack 默认只能打包 js 类型的文件,无法处理其他非js类型的文件
// 报错
// ERROR in ./src/css/commen.css 1:6
// Module parse failed: Unexpected token (1:6)
// You may need an appropriate loader to handle this file type.
// > ul,li {
// | list-style: none;
// | }
// 如果要处理非js的文件,需要下载第三方加载器
// css 安装 style-loader 和 css-loader
webpack 处理非js类型文件的过程
// 1.如果不是 js类型的文件,就去找相关的第三方 loader
// 2.找到规则,去调用对应loader处理这种文件类型
// 3.调用loader的时候,从后往前调用
// 4.最后一个loader调用完毕会把结果返回给 webpack 进行打包合并
下载:npm i style-loader css-loader
配置:webpack.config.js
// 配置所有第三方加载器
module: {
rules: [ // 所有第三方加载器匹配规则
{test: /\.css$/, use: ['style-loader', 'css-loader']} // 匹配 css
]
}
引用:入口文件 main.js
import './css/commen.css'
配置引用图片和字体图标
下载: npm i file-loader url-loader
// 匹配图片
// limit: 单位字节 图片的字节数超过设置的字节数,图片路径不会转为base64位
// name=[hash:8]-[name].[ext0] 设置名字不会被编码,还是之前的名字,前边的hash数防止名字重复图片只显示一个
{test: /\.(jpg|png|gif|bmp|svg)$/, use: ["url-loader?limit=657057&name=[hash:8]-[name].[ext0]"]},
{test: /\.(eot|svg|ttf|woff|woff2)$/, use: 'url-loader'}
配置bable
下载:
配置1: 打开配置文件 webpack.config.js 在module属性中的rules 中添加新的匹配规则
配置2:在项目的根目录中,新建一个 .bablerc 的Babel 配置文件,这个配置文件属于 json 格式
{
"presets": [
"@babel/preset-env"
],
"plugins": [
"@babel/plugin-proposal-class-properties",
"@babel/transform-runtime"
]
}
注意: @babel/preset-env 包含所有的 es*** 相关得到语法
webpack 警告
WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets:
bundle.js (274 KiB)
WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web perfor
mance.
Entrypoints:
main (274 KiB)
bundle.js
WARNING in webpack performance recommendations:
You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.
For more info visit https://webpack.js.org/guides/code-splitting/
//解决方式一
// 在webpack.config.js中添加
performance: {
hints:false
}
//方式二
//在webpack.config.js中添加
performance: {
hints: "warning", // 枚举
maxAssetSize: 30000000, // 整数类型(以字节为单位)
maxEntrypointSize: 50000000, // 整数类型(以字节为单位)
assetFilter: function(assetFilename) {
// 提供资源文件名的断言函数
return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');
}
},
webpack- vue总结
webpack中如何使用 vue
webpackVue-router总结
webpack中使用vue的router
把路由从main.js中抽离
es6 中导入导出
es6 导入语法
es6 导出语法
注意:
vue render
替换 el 所指定的容器
createElements 是一个方法,调用方法能把指定组件模板渲染位HTML结构
return createElements(login); // 返回的结果可以替换 el 指定的那个容器
var login = {
template: ‘
var vm = new Vue({
el: '#app',
data: {},
methods: {},
render: function (createElements) { // createElements 是一个方法,调用方法能把指定组件模板渲染位HTML结构
return createElements(login); // 返回的结果可以替换 el 指定的那个容器
}
})
Vue和Mint UI
mint UI 官网 https://cloud.tencent.com/developer/section/14899615
安装 :npm i mint-ui -S
按钮的使用
全局安装
import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'
Vue.use(MintUI);
安装组件
import { Button } from 'mint-ui'
Vue.component(Button.name, Button);
简短提示框的使用
使用
Toast({
message: '提示',
position: 'bottom',
duration: 5000
});
执行 Toast 方法会返回一个 Toast 实例,每个实例都有 close 方法,用于手动关闭 Toast
let instance = Toast('提示信息');
setTimeout(() => {
instance.close();
}, 2000);
参数 说明 类型 可选值 默认值
message 文本内容 String
position Toast 的位置 String ‘top’‘bottom’‘middle’ ‘middle’
duration 持续时间(毫秒),若为 -1 则不会自动关闭 Number 3000
className Toast 的类名。可以为其添加样式 String
iconClass icon 图标的类名 String
mui
下载:npm install --save muicss
导入:
npm i vue-preview -S