基本安装使用
安装webpack
安装指定版本:npm install webpack@4.44.1 webpack-cli@3.3.12
初始化项目
npm init -y
//自动设置 也可以选择 npm init 手动设置配置
之后npm install webpack webpack-cli --save-dev
(生成开发环境)–save-dev可以缩写为-D```
下载打包依赖
npm install --save lodash
创建目录结构
|- package.json
+ |- /src
+ |- index.js
+ |- /dist
+ |- index.html
src/index.js
import _ from 'lodash';
function component() {
var element = document.createElement('div');
element.innerHTML = _.join(['Hello', 'webpack'], ' ');
return element;
}
document.body.appendChild(component());
dist/index.html
<!doctype html>
<html>
<head>
<title>起步</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
package.json
{
"name": "webpack-dom",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"lodash": "^4.17.20"
},
"devDependencies": {
"webpack": "^4.44.2",
"webpack-cli": "^3.3.12"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
此处通用使用:npx webpack
运行 打包静态输出main.js
如果使用全局安装webpack此处可以使用:webpack 打包输出main.js
否则可以运行./node_modules/.bin/webpack
输出
使用配置文件
///更新目录 添加webpack.config.js
webpack-demo
|- package.json
+ |- webpack.config.js
|- /dist
|- index.html
|- /src
|- index.js
webpack.config.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
之后 npx webpack
运行打包 可以看到dist文件中多了bundle.js
npm 脚本
package.json中script里加"build": "webpack"
配置
可以使用npm run build
运行打包 更便捷
整合其他资源
为了使用css 需要安装配置style-loader 和 css-loader:npm install --save-dev style-loader css-loader
webpack.config.js中添加配置
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
}
src文件下添加style.css
.hello{
color:red;
}
src/index.js中
//添加引入模块
import './style.css';
//并添加class名 hello
element,classList.add("hello")
npm run build更新加载
加载图片
下载依赖:npm install --save-dev file-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: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
+ {
+ test: /\.(png|svg|jpg|gif)$/,
+ use: [
+ 'file-loader'
+ ]
+ }
]
}
};
添加src/icon.png
引用:src/index.js中
import _ from 'lodash';
import './style.css';
+ import Icon from './icon.png';
function component() {
var element = document.createElement('div');
// Lodash,现在由此脚本导入
element.innerHTML = _.join(['Hello', 'webpack'], ' ');
element.classList.add('hello');
+ // 将图像添加到我们现有的 div。
+ var myIcon = new Image();
+ myIcon.src = Icon;
+
+ element.appendChild(myIcon);
return element;
}
document.body.appendChild(component());
src/style.css
.hello {
color: red;
+ background: url('./icon.png');
}
重新构建:npm run build
再次打开html文件 一切顺利文字傍边会有图片
加载字体
通过更新webpack.connfig.js 来处理为文字文件
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
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中添加文件my-font.woff和my-font.woff2
src/style.css
+ @font-face {
+ font-family: 'MyFont';
+ src: url('./my-font.woff2') format('woff2'),
+ url('./my-font.woff') format('woff');
+ font-weight: 600;
+ font-style: normal;
+ }
.hello {
color: red;
+ font-family: 'MyFont';
background: url('./icon.png');
}
从新构建npm run build
看是否处理了文字
加载数据
下载依赖:npm install --save-dev csv-loader xml-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: [
{
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
src/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>
现在,你可以 import 这四种类型的数据(JSON, CSV, TSV, XML)中的任何一种,所导入的 Data 变量将包含可直接使用的已解析 JSON:
src.index.js中引入
import Data from './data.xml';
并在component方法中打印console.log(Data)
```console.log(Data)
**全局资源**
更直观的方式将模块和资源组合在一起。无需依赖于含有全部资源的 /assets
```javascript
- |- /assets
+ |– /components
+ | |– /my-component
+ | | |– index.jsx
+ | | |– index.css
+ | | |– icon.svg
+ | | |– img.png
管理输出
预先准备
src中添加print.js文件
内容如下
export default function printMe() {
console.log('I get called from print.js!');
}
在src/index.js中使用
import _ from 'lodash';
+ import printMe from './print.js';
function component() {
var element = document.createElement('div');
+ var btn = document.createElement('button');
element.innerHTML = _.join(['Hello', 'webpack'], ' ');
+ btn.innerHTML = 'Click me and check the console!';
+ btn.onclick = printMe;
+
+ element.appendChild(btn);
return element;
}
document.body.appendChild(component());
同时更新dist/index.html
<!doctype html>
<html>
<head>
- <title>Asset Management</title>
+ <title>Output Management</title>
+ <script src="./print.bundle.js"></script>
</head>
<body>
- <script src="./bundle.js"></script>
+ <script src="./app.bundle.js"></script>
</body>
</html>
之后将entry添加src/print.js作为新的入口起点(print) 然后修改output,一便动态生成bundle文件名称
webpack.config.js
const path = require('path');
module.exports = {
- entry: './src/index.js',
+ entry: {
+ app: './src/index.js',
+ print: './src/print.js'
+ },
output: {
- filename: 'bundle.js',
+ filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
npm run build更新运行
设定 HtmlWebpackPlugin
npm install --save-dev html-webpack-plugin
webpack.config.js
const path = require('path');
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
app: './src/index.js',
print: './src/print.js'
},
+ plugins: [
+ new HtmlWebpackPlugin({
+ title: 'Output Management'
+ })
+ ],
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
npm run build
更新
如果你在代码编辑器中将 index.html 打开,你就会看到 HtmlWebpackPlugin 创建了一个全新的文件,所有的 bundle 会自动添加到 html 中。
清除dist时候
依赖: npm install clean-webpack-plugin --save-dev
使用和中文文档有所更新
使用可用
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
plugins: [new CleanWebpackPlugin()],
笔记:
- webpack.config.js配置文件
"dependencies": {///为生产环境运行-S产生
"lodash": "^4.17.20"
},
"devDependencies": {///开发环境 本地存储 -D产生
"webpack": "^4.44.1",
"webpack-cli": "^3.3.12"
}
2…install 用于安装 uninstall用于卸载