当前位置: 首页>前端>正文

vue项目 配置transpileDependencies vue项目配置webpack

一、依赖安装

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

npm i vue element-plus axios

安装完后会生成package-lock.json、package.json和node_modules,安装的版本如下:

vue项目 配置transpileDependencies vue项目配置webpack,vue项目 配置transpileDependencies vue项目配置webpack_css,第1张

然后要安装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如下:

vue项目 配置transpileDependencies vue项目配置webpack,vue项目 配置transpileDependencies vue项目配置webpack_vue.js_02,第2张

二、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__引入模块

vue项目 配置transpileDependencies vue项目配置webpack,vue项目 配置transpileDependencies vue项目配置webpack_css_03,第3张

将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));
/******/ 	})();



https://www.xamrdz.com/web/2jz1922114.html

相关文章: