一、管理输出

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. MSSQL2008 常用sql语句

    一.基础 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  2. Java-API:java.lang百科

    ylbtech-Java-API:java.lang百科 java.lang是提供利用 Java 编程语言进行程序设计的基础类.最重要的类是Object(它是类层次结构的根)和 Class(它的实例表 ...

  3. Intellij IDEA 发布后的项目在哪里

    Intellij IDEA 中使用 tomcat 并发布项目后,项目并没有出现在在 webapps 文件夹中,如果没有手动修改过部署目录的话,idea的真实部署目录为 File---->Proj ...

  4. C字符串翻转

    实现字符串翻转,思路很简单,就是首尾字符对调. void reverse(char* str){ char* p = str + strlen(str) - 1;//最后一个字符地址 char tem ...

  5. python-xlrd api

    1.导入模块 import xlrd from xlrd import open_workbook 2.打开Excel文件读取数据 data = xlrd.open_workbook('excelFi ...

  6. Python打造一个目录扫描工具

    目标:用Python3写一款小型的web目录扫描工具 功能:1.扫描指定站点 2.指定网站脚本类型来扫描 3.可控线程 4.可保存扫描结果 首先定义一个命令参数的函数 def parse_option ...

  7. spring bean管理

    轻量级,无侵入 Bean管理 1 创建applicationContext.xml 2 配置被管理的Bean 3 获取Bean pom.xml配置 <dependency> <gro ...

  8. NSThread 基本使用

    一.简介 (1)使用NSThread对象建立一个线程非常方便 (2)但是!要使用NSThread管理多个线程非常困难,不推荐使用 (3)技巧!使用[NSThreadcurrentThread]跟踪任务 ...

  9. DAY20-Django之FileField与ImageField

    ImageField 和 FileField 可以分别对图片和文件进行上传到指定的文件夹中. 1. 在下面的 models.py 中 : picture = models.ImageField(upl ...

  10. 理解configure,make,make install(笔记整理)

    在Linux系统里有时候需要自己编译安装一些提供了源文件的软件,比如Nginx.一般编译的步骤是:configure -> make -> make install. 1. configu ...