一、管理输出

1.多入口配置

entry: {
index1: './src/index.js',
index2: './src/index2.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},

上面的配置npm run build之后会生成index.bundle.js和index2.bundle.js, 然后在index.html中添加js引用

2.设定 HtmlWebpackPlugin

HtmlWebpackPlugin会生成新的index.html,替换掉之前旧的index.html

1)安装HtmlWebpackPlugin

npm install --save-dev html-webpack-plugin

2)配置webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');

plugins: [
new HtmlWebpackPlugin({
title: 'Output Management'
})
],

3.清理 /dist 文件夹

通常,在每次构建前清理 /dist 文件夹,是比较推荐的做法,因此只会生成用到的文件。

1)安装clean-webpack-plugin

npm install clean-webpack-plugin --save-dev

2)配置webpack.config.js

const CleanWebpackPlugin = require('clean-webpack-plugin');
plugins: [
new CleanWebpackPlugin(),
],

二、开发

1.source map

将编译后的代码映射回原始源代码。如果一个错误来自于 b.js,source map 就会明确的告诉你,关于source map的选项。缺点是增大体积,但不影响开发环境

// 与entry和output同级
devtool: 'inline-source-map',

2.热加载

1)安装webpack-dev-server

npm install --save-dev webpack-dev-server

2)配置webpack.config.js

const webpack = require('webpack');
plugins: [
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin()
],
devServer: {
//设置基本目录结构,用于找到程序打包地址
contentBase: './dist',
//服务端压缩是否开启
compress: true,
//服务器的IP地址,可以使用IP也可以使用localhost
host: '192.168.1.108,
//配置服务端口号
port: ,
//是否自动打开浏览器
open: true,
hot: true,
}

3)修改package.json

"scripts": {
"build": "webpack --config webpack.config.js",
"serve": "webpack-dev-server --config webpack.config.js"
},

执行npm run serve

三、webpack-merge

开发环境和生产环境的构建目标差异很大。在开发环境中,我们需要具有强大的、具有热模块替换能力的 source map 和 localhost server。而在生产环境中,我们的目标则转向于关注更小的 bundle以及更优化的资源,以改善加载时间。由于要遵循逻辑分离,我们通常建议为每个环境编写彼此独立的 webpack 配置。为了将独立的配置合并在一起,我们将使用一个名为 webpack-merge 的工具。通过“通用”配置,我们不必在环境特定的配置中重复代码。

1)安装webpack-merge

npm install --save-dev webpack-merge

2)在根目录下创建config文件夹,然后在config文件夹下创建webpack.common.js  webpack.dev.js  webpack.prod.js文件

webpack.common.js

const path = require('path');

module.exports = {
entry: {
app: './src/index.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};

webpack.dev.js

const merge = require('webpack-merge');
const common = require('./webpack.common.js'); module.exports = merge(common, {
mode: 'development',
devtool: 'inline-source-map',
devServer: {
contentBase: '../dist'
}
});

webpack.prod.js

const merge = require('webpack-merge');
const common = require('./webpack.common.js'); module.exports = merge(common, {
mode: 'production'
});

3)修改package.json

"scripts": {
"build:dev": "webpack --config config/webpack.dev.js",
"build:prod": "webpack --config config/webpack.prod.js"
},

四、CommonsChunkPlugin

通过使用 CommonsChunkPlugin 来移除重复的模块,减小代码体积

1)配置webpack.config.js

// 与entry和output同级
optimization: {
splitChunks: {
name: 'common',
chunks: "initial",
}
},

五、shimming 全局变量

1)配置webpack.config.js

const webpack = require('webpack');
plugins: [
new webpack.ProvidePlugin({
_: 'lodash'
})
],

2)在js中直接引用_就可以

element.innerHTML = _.join(['Hello', 'webpack'], ' ');

参考:

1.https://www.webpackjs.com/guides/development/

webpack4 入门(二)的更多相关文章

  1. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  2. Swift语法基础入门二(数组, 字典, 字符串)

    Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...

  3. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  4. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  5. css入门二-常用样式

    css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...

  6. 微服务(入门二):netcore通过consul注册服务

    基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...

  7. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

  8. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  9. webpack4入门

    前提 已安装node(版本号>4.0,已自带NPM) mac机器 有一个空目录 无webpack.config.js配置打包 快速构建package.json文件. npm init -y 安装 ...

  10. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

随机推荐

  1. HDU5468(dfs序+容斥原理)

    Puzzled Elena Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  2. Update多个字段从一个表中

    UPDATE XXXXXX S SET (S.XXX, S.CCC, S.DDD, S.AAA, S.BBB) = (SELECT F.XXX, F.CCC, F.AAA, BBB FROM XXXX ...

  3. 机器学习:PCA(人脸识别中的应用——特征脸)

    一.思维理解 X:原始数据集: Wk:原始数据集 X 的前 K 个主成分: Xk:n 维的原始数据降维到 k 维后的数据集: 将原始数据集降维,就是将数据集中的每一个样本降维:X(i) . WkT = ...

  4. Celery-4.1 用户指南: Task(任务)

    任务是构建 celery 应用的基础块. 任务是可以在任何除可调用对象外的地方创建的一个类.它扮演着双重角色,它定义了一个任务被调用时会发生什么(发送一个消息),以及一个工作单元获取到消息之后将会做什 ...

  5. Apache Geronimo Remote Code Execute Vulnerability

    简介: Apache Geronimo 是 Apache 软件基金会的开放源码J2EE服务器,它集成了众多先进技术和设计理念. 这些技术和理念大多源自独立的项目,配置和部署模型也各不相同. Geron ...

  6. 2015.4.21 SetWindowPos函数用法

    定义:[DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd, int hWndl ...

  7. spring 框架整合

    struts hibernate spring 先贴出框架整合需要的maven <project xmlns="http://maven.apache.org/POM/4.0.0&qu ...

  8. CreateRemoteThread 远程注入

    在release中可以成功,在debug中被注入的程序停止工作 #pragma once#include "stdafx.h"#include <windows.h># ...

  9. C语言学习笔记--多维数组和多维指针

    1. 指向指针的指针 (1)指针的本质是变量,会占用一定的内存空间 (2)可以定义指针的指针来保存指针变量的地址值 (3)指针是个变量,同样也存在传值调用与传址调用 重置动态空间的大小 #includ ...

  10. iOS 给Main.storyboard 添加button 事件《转》

    XCODE中使用Main.Storyboard拉入控件并实现事件(Swift语言)   如何在XCODE中的Main.Storyboard内拉入控件并实现一个简单的效果呢?本人由于刚接触Swift语言 ...