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)的更多相关文章

  1. webpack入门进阶(3)

    1.11.预处理器文件处理 1.sass文件 sass这种css预处理器是以.scss结尾,需要用node-sass和sass-loader来处理 安装loader npm i node-sass s ...

  2. webpack入门进阶(2)

    1.4.webpack-dev-server webpack-dev-server是我们在开发阶段需要用到的一个服务器,它会把代码打包到内存,我们可以通过http的方式访问到打包到内存的代码 安装 n ...

  3. webpack入门教程之Hello webpack(一)

    webpack入门教程系列为官网Tutorials的个人译文,旨在给予想要学习webpack的小伙伴一个另外的途径.如有不当之处,请大家指出. 看完入门教程系列后,你将会学习到如下内容: 1.如何安装 ...

  4. webpack入门——webpack的安装与使用

    一.简介 1.什么是webpack webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. ...

  5. 一小时包教会 —— webpack 入门指南

    什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...

  6. Webpack 入门指南 - 3. Hello, Angular2!

    Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目 ...

  7. Webpack 入门指南 - 2.模块

    这一次我们谈谈模块问题. 通常我们希望这个项目可以分为多个独立的模块,比如,上一次提高的 hello 函数,如果我们定义为一个模块,其它模块引用之后,直接调用就好了.在前端怎么使用模块呢?这可说来话长 ...

  8. Webpack 入门指南 - 1.安装

    Webpack 是目前流行的打包工具,如何安装它呢? 1. 安装 Node Js 首先,Webpack 是基于 NodeJs 的工具,你必须首先安装 NodeJs. NodeJs 仅仅只需要在你的系统 ...

  9. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

随机推荐

  1. Java实现 LeetCode 590 N叉树的后序遍历(遍历树,迭代法)

    590. N叉树的后序遍历 给定一个 N 叉树,返回其节点值的后序遍历. 例如,给定一个 3叉树 : 返回其后序遍历: [5,6,3,2,4,1]. 说明: 递归法很简单,你可以使用迭代法完成此题吗? ...

  2. Java实现 LeetCode 456 132模式

    456. 132模式 给定一个整数序列:a1, a2, -, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj ...

  3. Java实现 LeetCode 258 各位相加

    258. 各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由 ...

  4. java代码(11) ---java代码的优化

    java代码的优化 参考了一些Java开发手册有关代码的规范,觉得一段好的代码可以从三个维度去分析.1)性能,2)可扩展性,3)可读性 让我们看看别人是怎么去分析,还有值得我们去学习的地方,也是我正在 ...

  5. 批量执行app自动化测试思路设计图

  6. install-package : 由于无法加载项目 mydemo 的详细信息,操作失败

    安装nuget package包提示错误 install-package : 由于无法加载项目 mydemo 的详细信息,操作失败 解决方法 项目用dotnet cli 命令dotnet new mv ...

  7. 容器技术之Docker私有镜像仓库docker-distribution

    在前边的博客中我们说到docker的架构由docker客户端.服务端以及仓库组成:docker仓库就是用来存放镜像的地方:其实docker registry我们理解为存放docker镜像仓库的仓库比较 ...

  8. 创建sudo -i免密权限账户

    项目原因,服务器需要创建普通用户,但又不能让用户拿到root密码. 创建用户 [root@bogon ~]# groupadd connect [root@bogon ~]# useradd -g c ...

  9. 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台

    背景 从传统运维到容器化的 Docker Swarm 编排,从 Docker Swarm 转向 Kubernetes,然后在 Kubernetes 运行 SpringCloud 微服务全家桶,到最终拥 ...

  10. 谈谈Java常用类库中的设计模式 - Part Ⅱ

    概述 本系列上一篇:建造者.工厂方法.享元.桥接 本文介绍的设计模式(建议按顺序阅读): 适配器 模板方法 装饰器 相关缩写:EJ - Effective Java Here We Go 适配器 (A ...