本文首发于我的Github博客
本文是webpack教程的第一篇文章,会介绍
webpack <入口文件> -o <目标文件> --mode <模式>
webpack --config <配置文件>
scripts
添加与npm run build
涉及到的代码有不使用webpack版本,使用webpack和npm版本
前面提到,webpack是一个构建系统,这究竟意味着什么呢?我们先来看webpack官网上的图
我们可以看到:
所以webpack是构建系统的含义:
根据项目文件中提供的依赖关系,自动构建整齐的独立文件
先贴一下webpack CLI的官网文档
为了体现使用webpack的优势,我们先准备一个不使用webpack的项目版本 webpack-demo init commit
这个项目实现的功能是: 点击按钮,下方的文字会出现或者消失
我们可以看到,index.html
中引用了两个js文件:
<script src="js/dom-loader.js">script>
<script src="js/app.js">script>
这两个引用的顺序是不可改变的,如果改变,那么按钮就会失效
缺点其实还有很多,比如后期引入Sass这种扩展CSS,或者Babel这种JS转译器,都需要手动引入和管理,非常麻烦,webpack会帮我们完成这些管理,当然,这些内容稍后再介绍,先看最基础的使用
我们首先使用如下命令安装webpack和webpack-cli(当然,项目需要使用npm init
初始化,需要安装node.js
和npm
):
npm install webpack webpack-cli --save-dev
在使用webpack之前,我们需要明白,webpack是根据源代码中的依赖关系进行构建的
那么,我们就必须在源代码中对依赖关系进行声明
声明的方式是ES6的import, export
语法
注意: 这里使用ES6的
import, export
语法只是因为webpack可以识别它们,在项目中使用其他的ES6语法仍然会导致兼容性问题,关于如何将ES6或更新的语法转化为ES5语法,后续教程会涉及
所以我们对源代码作出修改
// dom-loader.js
export var button = document.querySelector("#toggle-button")
export var graph = document.querySelector("#toggled-graph")
// app.js
import {button, graph} from "./dom-loader"
//...
声明了依赖关系之后,就需要使用webpack构建文件了,为了构建,我们需要指定两类文件以及模式
production
,但是会报Warningdevelopment
就好production
会最小化文件,导致整个文件没有多余的空白符,可读性为0而后使用webpack CLI
> webpack <入口文件> -o <目标文件> --mode <模式>
在这里,就是
webpack ./js/app.js -o bundle.js --mode development
webpack就会直接生成bundle.js
而在index.html
中,我们只需要引入这一个bundle.js
就可以了
<script src="bundle.js">script>
webpack CLI可以使用命令行参数的方式运作,也可以使用配置文件的方式运作
不过配置文件的书写方式涉及到webpack许多核心概念,下次再说,这里先放上指定配置文件的命令
> webpack --config <配置文件>
使用webpack原生命令比较繁琐,也没有办法记录在项目文件中,可以使用npm的scripts列表进行管理
在package.json
中添加scripts
{
"name": "webpack-demo",
"version": "1.0.0",
"description": "demo for webpack",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
# 添加 script
"build": "webpack ./js/app.js -o bundle.js --mode development"
},
"author": "rivers-shall",
"license": "ISC",
"devDependencies": {
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11"
}
}
而后我们只需要:
> npm run build
就可以便捷使用webpack构建文件了