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).图片等都 ...
随机推荐
- Chisel3 - Tutorial - Tbl
https://mp.weixin.qq.com/s/e8vJ8claauBtiuedxYYaJw 实现可以动态索引的表. 参考链接: https://github.com/ucb-bar/c ...
- 在jsp文件中出现Unknown tag (c:out)
出现这个提示之后,这个out是没有被执行的,在最前面加上 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix= ...
- svg高级应用及动画
canvas 和 webGL 这两项图形技术结合 css3 可以说能完成绝大部分的动画和需求.但 canvas 和 webGL 毕竟是偏向底层的绘制引擎,某些场景使用起来还是过于繁琐的,不分场合一律使 ...
- Java实现 LeetCode 129 求根到叶子节点数字之和
129. 求根到叶子节点数字之和 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 12 ...
- Android中WebView如何加载JavaScript脚本
主Activity和XML布局,末尾附上效果图 package com.example.myapplication; import androidx.appcompat.app.AppCompatAc ...
- Java实现 洛谷 P1089 津津的储蓄计划
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scan ...
- java实现 蓝桥杯 算法训练 安慰奶牛
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...
- 深入浅出-TCP/IP协议族剖析&&Socket
Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 #简介 该篇文章主要回顾–TCP/I ...
- 01.vue-router的基本使用
Vue前端路由 1. npm install vue-router --save 2.脚手架安装 一.目录结构 二.index.js // 0.导入vue和路由插件 import Vue from ' ...
- Ubuntu一键安装Mariadb
系统版本: debian/ ubuntu/ 添加清华大学镜像库: sudo add-apt-repository -r 'https://mirrors.tuna.tsinghua.edu.cn/m ...