webpack入门进阶(1)
1.webpack应用实例
1.1.快速上手
初始化项目
mkdir webpack-demo
cd webpack-demo
npm init -y
安装webpack
npm i webpack@4.41.0 webpack-cli@3.3.9 -D
零配置使用webpack,webpack约束源文件目录必须为src, 默认配置文件为 src/index.js
我们新建目录如下:
webpack-demo
├── node_modules
├── src
| ├── index.js
| └── module1.js
├── package.json
├── package-lock.json
index.js
const fn1 = require("./module1")
fn1()
module1.js
function fn1() {
alert(1)
}
module.exports = fn1
运行
npx webpack
注意: npx是npm的一个包运行器,是npm 5.2版本后提供的一个工具,它会自动找到项目下 node_modules/.bin下的相关命令来运行
接下来,我们将运行命令配置到package.json
"scripts": {
"dev": "webpack --mode development"
},
配置完成后,我们就可以使用npm run dev来执行webpack命令了,注意: --mode是webpack的模式,有开发模式(development)和生产模式(production)
1.2.自定义配置文件
在前面我们使用的是webpack4的零配置运行的项目,如果我们需要实现更多的功能,我们需要自定义配置,比如:我们可以更改入口文件名、可以使用各种loader、插件等,webpack的配置文件名字通常是固定的,即webpack.config.js,配置都往这个文件里面写,因此,我们需要在项目根目录下创建好这个文件
// 引入nodejs的path模块来处理路径
const path = require("path")
module.exports = {
// 模式配置
mode: "development",
// 入口文件 通常使用绝对路径
entry: path.resolve(__dirname, "./src/index.js"),
// 出口配置
output: {
filename: "app.js",
path: path.resolve(__dirname, "dist")
}
}
上面已经在配置文件里设置了模式,因此,在package.json中就不需要传入mode这个参数了
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack"
},
1.3.拆分配置文件
一般情况下,我们的环境会分为开发环境和生成环境,代码在开发阶段和部署到生成环境的配置有些是不一样的,因此,我们希望把这两种环境配置中不一样的配置分别写到不同的文件里面,这样方便区分,易于维护,把两种环境都相同的配置,放到一个基本配置文件里面,所以我们至少要将配置文件拆分成三个文件
拆分后,我们的目录是这样的:
webpack-demo
├── build
| ├── webpack.base.js
| ├── webpack.dev.js
| └── webpack.prod.js
├── node_modules
├── src
| ├── index.js
| └── module1.js
├── package.json
├── p
我们如何来区分开发环境还是生产环境呢? 当我们运行webpack的时候,如果加了环境参数,我们是可以在配置文件中获取到的,例如:
"dev": "webpack --env.development"
上面的运行命令中增加了,--env.development这个参数,我们在配置文件中就可以获取到,获取方式如下
// 当我们导出的时候是一个函数,第一个参数就是环境变量,我们就可以在环境变量里拿到对应的环境
module.exports = function(env) {
// { development: true }
console.log(env)
}
基于以上的知识点,我们区分开发模式和生产模式的步骤为:
1. 执行webpack命令的时候 传入环境参数 --env.development || --env.production
2. 在webpack基本配置文件(webpack.base.js)中去获取环境参数
3. 根据环境参数再去区分到底是去加载 webpack.dev.js 中的配置 还是去加载webpack.prod.js
build/webpack.base.js
const dev = require("../build/webpack.dev")
const prod = require("../build/webpack.prod")
const path = require("path")
// 注意:需要先去安装这个包 npm i webpack-merge -D 这个包的作用是将配置合并
const merge = require("webpack-merge")
module.exports = function(env) {
const isDev = env.development
const base = {
entry: path.resolve(__dirname, "../src/index.js"),
output: {
filename: "index.js",
path: path.resolve(__dirname, "../dist")
}
}
if (isDev) {
return merge(base, dev)
} else {
return merge(base, prod)
}
}
build/webpack.dev.js
module.exports = {
mode: "development"
}
build/webpack.prod.js
module.exports = {
mode: "production"
}
注意:在运行的时候,我们就要去指定配置文件了, 通过--config来实现指定配置文件
package.json中的配置
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack --env.development --config ./build/webpack.base.js"
},
可以尝试着将上面--env.development 修改成--env.prodution试试看效果
螺钉课堂视频课程地址:http://edu.nodeing.com
webpack入门进阶(1)的更多相关文章
- webpack入门进阶(3)
1.11.预处理器文件处理 1.sass文件 sass这种css预处理器是以.scss结尾,需要用node-sass和sass-loader来处理 安装loader npm i node-sass s ...
- webpack入门进阶(2)
1.4.webpack-dev-server webpack-dev-server是我们在开发阶段需要用到的一个服务器,它会把代码打包到内存,我们可以通过http的方式访问到打包到内存的代码 安装 n ...
- webpack入门教程之Hello webpack(一)
webpack入门教程系列为官网Tutorials的个人译文,旨在给予想要学习webpack的小伙伴一个另外的途径.如有不当之处,请大家指出. 看完入门教程系列后,你将会学习到如下内容: 1.如何安装 ...
- webpack入门——webpack的安装与使用
一.简介 1.什么是webpack webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. ...
- 一小时包教会 —— webpack 入门指南
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...
- Webpack 入门指南 - 3. Hello, Angular2!
Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目 ...
- Webpack 入门指南 - 2.模块
这一次我们谈谈模块问题. 通常我们希望这个项目可以分为多个独立的模块,比如,上一次提高的 hello 函数,如果我们定义为一个模块,其它模块引用之后,直接调用就好了.在前端怎么使用模块呢?这可说来话长 ...
- Webpack 入门指南 - 1.安装
Webpack 是目前流行的打包工具,如何安装它呢? 1. 安装 Node Js 首先,Webpack 是基于 NodeJs 的工具,你必须首先安装 NodeJs. NodeJs 仅仅只需要在你的系统 ...
- webpack入门和实战(一):webpack配置及技巧
一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...
随机推荐
- Rocket - config - Parameters
https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw 介绍配置类Parameters及其伴生对象的实现. 参考链接: https://docs.q ...
- ActiveMQ 笔记(八)高级特性和大厂常考重点
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.可用性保证 引入消息队列之后该如何保证其高可用性? 持久化.事务.签收. 以及带复制的 Leavel ...
- 移动端border:1px问题解决方案
了解设备像素和css像素的因该知道,通常我们在写移动端时,是按照设计稿标注的像素除以设备的DPR来写真实的像素, 比如在iPhone6上,我们写的20px字体世界上在视觉效应上有20px; 所以当我们 ...
- 【RT-Thread笔记】BH1750软件包的使用
BH1750简介 BH1750是一种用于两线制串行总线接口的16位数字型光强度传感器集成电路.利用它的高分辨率可以探测较大范围的光强度变化.(1lx~65535lx). 创建工程.验证 在RT-Thr ...
- Java实现 LeetCode 714 买卖股票的最佳时机含手续费(动态规划 || 迭代法)
714. 买卖股票的最佳时机含手续费 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每次交 ...
- JavaScript实现登录滑动验证
来自于GitHub, 如何快速访问GitHub 先附上效果图 划到一半停止回自己回去的 PS: 附上代码,有需要自己更改, <!DOCTYPE html> <html lang=&q ...
- Java实现十六进制转十进制
基础练习 十六进制转十进制 时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进 ...
- Java实现 LeetCode 43 字符串相乘
43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2& ...
- Java实现第九届蓝桥杯书号验证
书号验证 2004年起,国际ISBN中心出版了<13位国际标准书号指南>. 原有10位书号前加978作为商品分类标识:校验规则也改变. 校验位的加权算法与10位ISBN的算法不同,具体算法 ...
- Java实现第八届蓝桥杯兴趣小组
兴趣小组 为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组 (以下称A组,B组,C组). 每个小组的学生名单分别在[A.txt],[B.txt]和[C.txt]中. 每个文件中存储的是学生的 ...