Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。
接下来我们简单为大家介绍 Webpack 的安装与使用。
安装 Webpack
在安装 Webpack 前,你本地环境需要支持 node.js。
npm install webpack -g
创建项目
·接下来我们创建一个目录 contents:
mkdir contents
在 app 目录下添加 index.js \ index.html 文件
接下来我们使用 webpack 命令来打包:
webpack index.js bundle.js
成功后的图片

打开index.html后。出现结果如下图所示

创建第二个样式文件
(略)。
代码尝试走了但是没走通
配置loader
Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换。
所以如果我们需要在应用中添加 css 文件,就需要使用到 css-loader 和 style-loader。
css-loader 会遍历 CSS 文件,然后找到 url() 表达式然后处理他们,style-loader 会把原来的 CSS 代码插入页面中的一个 style 标签中。
接下来我们使用以下命令来安装 css-loader 和 style-loader(全局安装需要参数 -g)。

执行以上命令后,会再当前目录生成 node_modules 目录,它就是 css-loader 和 style-loader 的安装目录。
接下来创建一个 style.css 文件,代码如下:
body {
background: yellow;
}



配置plugin
插件在 webpack 的配置信息 plugins 选项中指定,用于完成一些 loader 不能完成的工作。
webpack 自带一些插件,可以通过 npm 安装一些插件。
使用内置插件需要通过以下命令来安装:
npm install webpack --save-dev
比如我们可以安装内置的 BannerPlugin 插件,用于在文件头部输出一些注释信息。

一个实例
下面是一个小型项目的Webpack配置文件
const path = require('path'); // 引入path模块
const webpack = require('webpack'); // 引入webpack
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入html-webpack-plugin插件
const ExtractTextPlugin = require('extract-text-webpack-plugin'); // 引入css分离插件
const { devtools } = require('vue');
const { entry, output } = require('../webpack.config.cjs');
const { Plugin } = require('webpack');
module.exports = {
devtools:'eval-source-map',
entry:path.join(__dirname,'../src/main.js'),
output:{
path:path.join(__dirname,'../dist'),
filename:'bundle.js'
},
devServer:{
//静态资源根目录
contentBase:'./static',
historyApiFallback: true,
inline:true,
compress:true,
port:8080,
hot:true
},
module:{
rules:[
{
test:/\.html$/,
use:'html-loader'
},
{
test:/\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
},
{
test:/\.js$/,
exclude: /node_modules/,
use:{
loader:'babel-loader',
}
},
{
test:/\.(scss|less)$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [
{
loader: "css-loader",
options: {
url: false,
minimize: true,
sourceMap: true
}
},
{
loader:'sass-loader',
options:{
sourceMap:true
}
},
]
})
},
{
test:/\.(woff2|eot|gttf|otf|svg)$/,
use:{
loader:'file-loader'
},
},
{
test:/\.(png|jpg|gif)$/,
use:{
loader:'url-loader',
options:{
limit:8192
}
}
}
]
},
plugins:[
new webpack.HotModuleReplacementPlugin(),
new HtmlWebpackPlugin({
title:'vue-webpack-demo',
filename:'index.html',
template:'./src/index.html',
favicon:'./src/favicon.ico',
inject:true,
hash:true
}),
// 引入以作为其他插件的依赖
new webpack.ProvidePlugin({
$:'jquery',
jQuery:'jquery',
'window.jQuery':'jquery'
}),
new ExtractTextPlugin('style.css'), // 将css提取成单独的文件
]
};