热搜:fiddler git ip ios 代理
历史搜索

Webpack 手把手实现一个Vue

游客2024-10-31 09:30:01
目录文章目录
  1. 1、建一个文件夹
  2. 2、初始化 npm
  3. 3、webpack、webpack-cli
  4. 4、src、public
  5. 5、入口文件
  6. 6、配置打包命令
  7. 小知识:loader 和 plugin
  8. 7、打包 html
  9. 打包 CSS
  10. 打包图片
  11. 配置 babel
  12. 打包 Vue
  13. 配置路径别名
  14. webpack-dev-server
  15. 区分环境
  16. 构建进度条
  17. source-map
  18. 环境变量
  19. 优化、规范

大家平时在进行 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,就能发现打包成功:

Webpack 手把手实现一个Vue 1

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')
        },
      },
    }),
  ]
})

优化、规范

关于优化、规范,我会另外再写两篇文章来讲。

标签:vue-cli