- 1、建一个文件夹
- 2、初始化 npm
- 3、webpack、webpack-cli
- 4、src、public
- 5、入口文件
- 6、配置打包命令
- 小知识:loader 和 plugin
- 7、打包 html
- 打包 CSS
- 打包图片
- 配置 babel
- 打包 Vue
- 配置路径别名
- webpack-dev-server
- 区分环境
- 构建进度条
- source-map
- 环境变量
- 优化、规范
大家平时在进行 Vue 开发的时候,大部分人都是使用 Vue-cli 这个现成的 Vue 脚手架来进行开发的,但是用它用了这么久,你难道不想自己搭一个属于自己的Vue-cli
吗?
今天我就带大家来搭建一个基本的Vue-cli
,也可以让大家对Webpack
有更深入的了解!建议大家一定要跟着我一步一步来哦!
事先说明:本文只介绍 vue-cli 基本配置,关于优化、规范这两方面,我后面会再写两篇文章进行讲解。
1、建一个文件夹
新建一个文件夹 my-vue-cli 用来存放项目。
2、初始化 npm
在终端中输入:
npm init
然后一直回车就行,这样能使项目拥有一个 npm 管理环境,之后可以在此环境上安装我们所需要的包。
3、webpack、webpack-cli
安装webpack、webpack-cli
:
webpack
:打包的工具webpack-cli
:为 webpack 提供命令行的工具
npm i webpack webpack-cli -D
4、src、public
在根目录下新建src、public
这两个文件夹,前者用来放置项目主要代码,后者用来放项目公用静态资源
public/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>my-vue-cli</title> </head> <body> <div id="app"></div> </body> </html>
src/main.js
import { add } from './tools/add.js' console.log(add(1, 2)) console.log('我是 main.js')
src/tools/add.js
export const add = (a, b) => { return a + b }
5、入口文件
刚刚的main.js
就是我们的入口文件,也就相当于整个引用树的根节点,webpack 打包需要从入口文件开始查找,一直到打包所有引用文件。
进行入口文件的配置,在根目录下新建webpack.config.js
:
const path = require('path') module.exports = { // 模式 开发模式 mode: 'development', // 入口文件 main.js entry: { main: './src/main.js' }, // 输出 output: { // 输出到 dist 文件夹 path: path.resolve(__dirname, './dist'), // js 文件下 filename: 'js/chunk-[contenthash].js', // 每次打包前自动清除旧的 dist clean: true, } }
6、配置打包命令
到package.json
里配置打包命令:
"scripts": { "build": "webpack" },
现在我们到终端输入npm run build
,就能发现打包成功:
source-map
source-map
的作用:代码报错时,能快速定位到出错位置,webpack5
的所有source-map 模式
可以看 webpack 官网:点击这里
这里我使用两种模式:
development
:使用eval-cheap-module-source-map
模式,能具体定位到源码位置和源码展示,适合开发模式,体积较小production
:使用nosources-source-map
,只能定位源码位置,不能源码展示,体积较小,适合生产模式
所以我们开始配置source-map
。
webpack.dev.js
// 刚才的代码... module.exports = merge(base, { // 刚才的代码... devtool: 'eval-cheap-module-source-map' })
webpack.prod.js
// 刚才的代码... module.exports = merge(base, { // 刚才的代码... devtool: 'nosources-source-map' })
环境变量
配置devlopment、production
这两个环境的环境变量。
webpack.dev.js
// 刚才的代码... const webpack = require('webpack') module.exports = merge(base, { // 刚才的代码... plugins: [ // 定义全局变量 new webpack.DefinePlugin({ process: { env: { NODE_DEV: JSON.stringify('development'), // 这里可以定义你的环境变量 // VUE_APP_URL: JSON.stringify('https://xxx.com') }, }, }), ] })
webpack.prod.js
// 刚才的代码... const webpack = require('webpack') module.exports = merge(base, { // 刚才的代码... plugins: [ // 定义全局变量 new webpack.DefinePlugin({ process: { env: { NODE_DEV: JSON.stringify('prodction'), // 这里可以定义你的环境变量 // VUE_APP_URL: JSON.stringify('https://xxx.com') }, }, }), ] })
优化、规范
关于优化、规范,我会另外再写两篇文章来讲。