从零开始用webpack搭建一个vue项目(一)

一、依赖安装

首先考虑到一个vue项目需要用到的库有vue、element-ui、axios,先进行安装

npm i vue element-plus axios

安装完后会生成package-lock.json、package.json和node_modules,安装的版本如下:在这里插入图片描述
然后要安装webpack及需要用到的loader
-D为安装开发依赖,只用于开发环境,安装完后会被写入package.json的devDependencies对象中

npm i -D webpack webpack-cli webpack-dev-server vue-loader vue-template-compiler sass-loader sass css-loader style-loader babel-loader @babel/core @babel/preset-env --legacy-peer-deps

安装完后,package.json如下:
在这里插入图片描述

二、webpack基础配置

首先新建src目录下的main.js作为项目的入口文件,新建webpack.config.js,具体配置如下:

//用commonjs的导入模块
const path = require('path')
const {VueLoaderPlugin} = require('vue-loader')

//用commonjs导出一个对象
module.exports = {
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname ,'dist'),
        filename:'bundle.js'
    },
    module:{
        rules:[
            {test:/\.vue$/,use:'vue-loader'},
            {test:/\.s[ca]ss$/,use:['style-loader','css-loader','scss-loader']},
            {
                test:/\.?js$/,
                use:{
                    loader:'babel-loader',
                },
                exclude: /node_modules/
            },
            {test:/\.(png|jpe?g|gif|svg|webp)$/,type:'asset/resource'}
        ]
    },
    plugins:[
        new VueLoaderPlugin()
    ],
    devServer:{
        static:'./dist'
    }
}

在这个配置文件中,有以下几个注意点:
1、output为打包的出口文件,path必须为绝对路径。
2、module中配置一些loader,因为webpack默认只支持js模块,loader的作用就是可以将css、vue等转化为js供webpack进行打包。
3、解析scss/sass文件需要三个loader,可以写成一个数组的形式,并且按调用的顺序从后往前写,最先需要用的scss-loader写在数组最后。
4、plugins中配置需要用到的插件,插件的作用是扩展webpack的功能。
5、webpack-dev-server会自动帮我们开启一个服务,并实时编译代码

三、配置命令行语句

在使用vue脚手架的时候,我们在终端输入npm run serve就可以开启一个服务并实时编译代码,这个其实就是在package.json中做相应的配置,配置如下:

"scripts": {
    "serve": "webpack serve --mode=development",
    "build": "webpack --mode=production"
  }

配置后执行npm run serve就相当于执行webpack serve --mode=development。此时webpack的基础配置已经结束,接下来要引入vue。

四、解析打包后的文件

src/main.js

const css = require("css-loader!./index.css");
const a = 100;
console.log(a, css);

src/index.css

body {
    width: 100%;
    height: 100vh;
    background-color: orange;
  }

终端运行npm run serve,在dist目录下得到打包文件bundle.js
解析bundle.js
整个bundle是个立即执行函数,用于模块的创建和执行,相当于把各个模块合成一个巨大的模块,每个模块都被包裹成一个函数,保证变量的私有域
webpack封装了require,通过__webpack_require__引入模块
在这里插入图片描述
将main.js改为

const css = import("css-loader!./index.css");
const a = 100;
console.log(a, css);

使用import()函数实现动态加载。重新打包,除了bundle.js外还生成了一个打包文件,这个文件把我们 import 的模块放进了一个单独的 js 文件中,webpack打包后的额文件能实现动态加载的主要逻辑为:
1、调用模块时会在 window 上注册一个 webpackChunk 数组
2、webpack 会动态创建一个 script 标签去加载这个模块,加载成功后会将该模块注入到 webpackChunk 中
3、webpackChunk.push 会调用 webpackJsonpCallback 拿到模块
4、模块加载完再使用 webpack_require 获取模块

/******/ 		var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
/******/ 		chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
/******/ 		chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
/******/ 	})();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值