什么是webpack?
这个webpack还真不是一两句话可以说清楚的。
可以粗鲁的理解为:前端模块化管理工具
我们先看看官方的解释:
At its core, webpack is a static module bundler for modern JavaScript applications.
从本质上来讲,webpack是一个现代的JavaScript应用的静态模块打包工具。
但是它是什么呢?用概念解释概念,还是不清晰。
我们从两个点来解释上面这句话:模块 和 打包
什么时候用grunt/gulp呢?
如果你的工程模块依赖非常简单,甚至是没有用到模块化的概念。
只需要进行简单的合并、压缩,就使用grunt/gulp即可。
但是如果整个项目使用了模块化管理,而且相互依赖非常强,我们就可以使用更加强大的webpack了。
所以,grunt/gulp和webpack有什么不同呢?
grunt/gulp更加强调的是前端流程的自动化,模块化不是它的核心。
webpack更加强调模块化开发管理,而文件压缩合并、预处理等功能,是他附带的功能。
npm install [email protected] -g
@ 后边是版本号
-g 是全局安装
src 目录里边是我们开发版本的文件,
接下来看一下我们的代码:
main.js
// 1、使用commonjs的模块化规范
const {
add,mul} = require("./mathUtools")
console.log(add(20,30));
console.log(mul(20,30));
// 2、使用es6的模块化规范
// import {name,age,height} from "./info"
// console.log(name);
// console.log(age);
// console.log(height);
import * as info from "./info"
console.log(info.name);//peng
console.log(info.age);//18
console.log(info.height);//1.75
mathUtools.js
:
function add(num1, num2) {
return num1 + num2
}
function mul(num1, num2) {
return num1 * num2
}
// commonjs的模块化规范
module.exports = {
add,
mul
}
info.js
:
// es6的模块化规范
export const name = "peng";
export const age = 18;
export const height = 1.75;
index.html
:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
首页
body>
<script src="./dist/bundle.js">script>
html>
使用到的命令是:webpack ./src/main.js ./dist/bundle.js
打包后会在 dist
目录下生成 bundle.js
文件
打包过后只需要引入bundle.js
即可,它会自动处理我们模块与模块之间的关系。
接下里我们看一下是否打包成功:
如果我们需要只输入webpack
命令即可打包指定的文件到指定的目录的话,
那么需要 配置webpack.config.js 和 配置package.json
首先在当前项目下手动创建 webpack.config.js
const path = require("path")
module.exports = {
entry:"./src/main.js",//入口
output:{
// __dirname 当前文件的路径
path:path.resolve(__dirname,"dist"),//需要动态的获取绝对路径
filename:"bundle.js"//打包的文件名
},//出口
}
引入node的path,我们需要先初始化该项目
使用命令 npm init
执行该命令后会要求填写一些信息:
然后一路回车
之后会在当前目录生成一个package.json
,该文件会包含当前项目的一些信息。
在package.json
文件中 有一个scripts
对象,
npm run 指令名
都会在scripts
里面找有没有对应的key
,
如果有,则运行对应的value
如何把 webpack
使用npm
映射呢?
只需要在scripts
对象里加这么一句:
"build":"webpack"
需要注意的是:在执行该命令时,会优先在本地查找webpack
的版本,没有再在全局下查找webpack
的版本
而在终端当中使用:webpack
命令使用的都是全局的webpack
的版本。
如果需要在终端当中不配置package.json而使用本地的话,就需要在终端中进入通过node_modules/.bin/webpack启动webpack打包
那么如何在本地安装webpack
呢?
使用命令:npm install [email protected](这里是版本号)--save-dev
dev=>devlop 开发
安装完成过后打开package.json
会发现多了一个devDependencies
,它代表的意思是开发时依赖。
对应的是 dependencies
,运行时依赖。