demo地址: https://github.com/Lkkkkkkg/webpack-demo
webpack初步配置参照 https://blog.csdn.net/qq593249106/article/details/84892069
配置加载css文件
webpack 视所有文件都为模块, css , 图片, 字体, 数据等静态资源都会打包进 js 文件, 所以会需要用到 loader 文件, 接下来安装处理css的loader文件
npm install style-loader css-loader --save-dev //需要用到style-loader和css-loader, 分别有不同作用
在 webpack.config.js 引入loader:
webpack.config.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [ //配置加载器, 用来处理源文件, 可以把es6, jsx等转换成js, sass, less等转换成css
{
test: /\.css$/, //配置要处理的文件格式,一般使用正则表达式匹配
use: ['style-loader', 'css-loader'] //使用的加载器名称
}
]
}
};
引入 loader 后, 就可以在你的 src/index.js 文件 impor t你想引入的 css 文件或者其他静态资源
在 src 目录文件下新建一个 style.css , 此时目录结构如下:
|- /dist //用于放打包后文件的文件夹
|- bundle.js //出口文件
|- index.html //模板文件
|- /node_modules
|- /src //用于放源文件的文件夹
|- index.js //入口文件
|- style.css //css文件
|- package.json
|- webpack.config.js //webpack配置文件
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>webpack-demo02</title>
</head>
<body>
<script src="bundle.js"></script>
</body>
</html>
index.js
import _ from 'lodash';
import './style.css'
function component() {
var element = document.createElement('div');
element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的语法
element.classList.add('hello'); //给元素添加一个类名hello
return element;
}
document.body.appendChild(component());
style.css
.hello {
color: green;
}
用NPM脚本运行webpack进行打包
npm run build
打开index.html
webpack打包成功, css起了作用, 文字变成了绿色
配置加载图片
加载图片需要用到另外一个 loader : file-loader
npm install --save-dev file-loader
在 webpack.config.js 引入loader:
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [ //配置加载器, 用来处理源文件, 可以把es6, jsx等转换成js, sass, less等转换成css
{
test: /\.css$/, //配置要处理的文件格式,一般使用正则表达式匹配
use: ['style-loader', 'css-loader'] //使用的加载器名称
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
}
]
}
};
现在, 当你 import MyImage from ‘./my-image.png’,该图像将被处理并添加到 output 目录, 并且 MyImage 变量将包含该图像在处理后的最终 url (也就是会帮你改掉对应的图片路径), 当使用 css-loader 时, 如上所示, 你的 CSS 中的 url(’./my-image.png’) 会使用类似的过程去处理, loader 会识别这是一个本地文件, 并将 ‘./my-image.png’ 路径,替换为输出目录中图像的最终路径, html-loader 以相同的方式处理 < img src="./my-image.png" / >
现在再 src 文件夹下添加一张图片picture.jpg:
|- /dist //用于放打包后文件的文件夹
|- bundle.js //出口文件
|- index.html //模板文件
|- /node_modules
|- /src //用于放源文件的文件夹
|- index.js //入口文件
|- picture.jpg //图片
|- style.css //css文件
|- package.json
|- webpack.config.js //webpack配置文件
然后在js中把这张图片加入到html中:
import _ from 'lodash';
import './style.css'
import Picture from './picture.jpg'
function component() {
var element = document.createElement('div');
element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的语法
element.classList.add('hello'); //给元素添加一个类名hello
var Pic = new Image(); //新建一个图片对象
Pic.src = Picture; //图片对象的路径设为引入进来的Picture
element.appendChild(Pic); //把图片对象插入到上面的div对象里
return element;
}
document.body.appendChild(component());
同时在css中引用图片:
.hello {
color: green;
background-image: url('./picture.jpg');
}
重新构建:
npm run build
打开index.html
可以看到添加的img成功引用到了图片, 并且css的引用的图片背景也成功了, 而且dist目录下多了一个名为eede154574125677a58d2f6e6112e417.jpg图片, 说明图片被成功处理了
配置加载字体
前面安装的file-loader 和 url-loader 可以接收并加载任何文件, 然后将其输出到构建目录, 所以也可以将字体进行加载
在 webpack.config.js 引入loader:
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [ //配置加载器, 用来处理源文件, 可以把es6, jsx等转换成js, sass, less等转换成css
{
test: /\.css$/, //配置要处理的文件格式,一般使用正则表达式匹配
use: ['style-loader', 'css-loader'] //使用的加载器名称
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: ['file-loader']
}
]
}
};
在 src 文件夹下放入要引用的字体文件 font.ttf :
|- /dist //用于放打包后文件的文件夹
|- bundle.js //出口文件
|- index.html //模板文件
|- /node_modules
|- /src //用于放源文件的文件夹
|- font.ttf //字体文件
|- index.js //入口文件
|- picture.jpg //图片
|- style.css //css文件
|- package.json
|- webpack.config.js //webpack配置文件
然后再 style.css 中使用自定义字体:
@font-face {
font-family: 'MyFont';
src: url('./font.ttf') format('truetype');
font-weight: bold;
font-style: normal;
}
.hello {
color: green;
font-family: MyFont;
font-size: 100px;
background-image: url('./picture.jpg');
}
输入 npm run build 重新构建, 打开index.html:
同时dist目录下多了一个名为 7823980a3d6d6d2b65f735d445c8a4bd.ttf 的文件, 说明字体文件也被处理过了, 成功加载了字体
配置加载资源文件(JSON, XML, CSV)
类似于 NodeJS, JSON 支持实际上是内置的, 也就是说 import Data from ‘./data.json’ 默认将正常运行, 要导入 CSV、TSV 和 XML, 需要用到 csv-loader 和 xml-loader:
npm install csv-loader xml-loader --save-dev
引入loader:
webpack.config.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [ //配置加载器, 用来处理源文件, 可以把es6, jsx等转换成js, sass, less等转换成css
{
test: /\.css$/, //配置要处理的文件格式,一般使用正则表达式匹配
use: ['style-loader', 'css-loader'] //使用的加载器名称
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: ['file-loader']
},
{
test: /\.(csv|tsv)$/,
use: ['csv-loader']
},
{
test: /\.xml$/,
use: ['xml-loader']
}
]
}
};
在 src 文件夹下加入 data.xml 数据文件:
|- /dist //用于放打包后文件的文件夹
|- bundle.js //出口文件
|- index.html //模板文件
|- /node_modules
|- /src //用于放源文件的文件夹
|- data.xml //数据文件
|- font.ttf //字体文件
|- index.js //入口文件
|- picture.jpg //图片
|- style.css //css文件
|- package.json
|- webpack.config.js //webpack配置文件
data.xml
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Mary</to>
<from>John</from>
<heading>Reminder</heading>
<body>Call Cindy on Tuesday</body>
</note>
修改一下 index.js , 引用一下 data.xml 里面的数据:
import _ from 'lodash';
import './style.css'
import Picture from './picture.jpg'
import Data from './data.xml';
function component() {
var element = document.createElement('div');
element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的语法
element.classList.add('hello'); //给元素添加一个类名hello
var Pic = new Image(); //新建一个图片对象
Pic.src = Picture; //图片对象的路径设为引入进来的Picture
element.appendChild(Pic); //把图片对象插入到上面的div对象里
console.log(Data); //输出数据
return element;
}
document.body.appendChild(component());
输入npm run build 重新构建, 打开index.html:
按F12, 在控制台里看到输出了xml文件的数据, 成功加载xml数据