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).图片等都 ...
随机推荐
- jchdl - GSL实例 - Assign
https://mp.weixin.qq.com/s/MtHR3iolPd5VQq6AUE-JPg Assign是一个节点,把输入线直接赋值给输出线.在转换成Verilog时,这种类型的节点会直接 ...
- undefined和nul
- 一个神秘URL酿大祸,差点让我背锅!
神秘URL 我叫小风,是Windows帝国一个普通的上班族.上一回说到因为一个跨域请求,我差点丢了饭碗,好在有惊无险,我的职场历险记还在继续. "叮叮叮叮~~~~",闹钟又把我给吵 ...
- Java实现 LeetCode 189 旋转数组
189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] ...
- 微信weixin://xxx 分析
通过weixin://来打开微信客户端: <a href="weixin://">打开微信</a> <a href="weixin://dl ...
- DedeCms 首页、列表页调用文章body内容的方法
[第一种方法] arclist标签使用如下: {dede:arclist row='1' typeid='1' addfields='body' idlist='1' channelid='1'} [ ...
- 线上服务的FGC问题排查,看这篇就够了!
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...
- sublime Text3 实现2:1:1三分屏效果
小trick, 水一篇博客 先上效果图 由于写题啥的时候需要重定向输入输出改数据对拍, 设置成这样的效果就非常直观的看数据 直接切题, 首选项--快捷键--default里搜索alt+shift+1( ...
- ado.net Web前端:关于JavaScript知识点的简单梳理
学习js:1.htmml2.cssjs+html+css == html5 js的组成:1).ecamscript ES是js的标准,js 是es 的实现2)文档对象模型(Document Objec ...
- 【JMeter_15】JMeter逻辑控制器__仅一次控制器<Once Only Controller>
仅一次控制器<Once Only Controller> 业务逻辑: 在每个线程内,该控制器下的内容只会被执行一遍,无论循环多少次,都只执行一遍.<嵌套在循环控制器之内时是个例外,每 ...