前言

hello,小伙伴们,本篇仓库出至于我的GitHub仓库 web-study ,如果你觉得对你有帮助的话欢迎star,你们的点赞是我持续更新的动力

web-study

webpack 打包工具

webpack 毫无疑问现在是非常火热的前端自动化打包工具,本系列教程是基于最新版 webpack 4.X.X 来编写。

webpack 4:零配置开始

  1. 创建一个目录然后进入,初始化生成 package.json 文件
md webpack-4-quickstart

cd webpack-4-quickstart

npm init -y
  1. 安装 webpack4webpack-cli
npm install webpack webpack-cli --save-dev
  1. 打开 package.json 添加构建脚本:
"scripts": {
"build": "webpack"
}
  1. 创建入口文件: index.jswebpack4 默认入口文件为/src/index.js
console.log('hello world!')
  1. 打包构建
npm run build

你会在 ~/webpack-4-quickstart/dist/main.js 得到你打包后的文件。

Webpack 4: 生产和开发模式

创建 webpack.config.js webpack 配置文件,webpack 4 介绍了生产( production) 和开发( development) 两种模式,需要通过 mode 属性指定。

webpack.config.js 文件中指定mode 属性为 development,再次打包文件。(npm run build)。

可以看到main.js文件中的代码没被压缩,哈哈,这就是 webpack 的厉害之处,可以分模式开发。

webpack 4:覆盖默认的入口/出口文件

webpack.config.js 文件中通过 entry 属性指定打包的入口文件,output属性指定打包后的出口文件。

const path = require('path')
module.exports = {
mode: 'development',
entry: './src/hello.js',
output: {
path: path.resolve(__dirname, 'dist'), // 这里必须指定一个绝对路径
filename: 'hello.js'
}
}

再次打包,就会打包 ./src/hello.js ,输出 ./dist/hello.js

webpack 4:用 Babel 7 转译 ES6 的 js 代码

现在大家都习惯用 ES6 写 Javascript。

但是不是所有浏览器都知道怎么处理 ES6。我们需要做一些转换。

这个转换的步骤叫做 transpilingtranspiling 是指把 ES6 转译成浏览器能够识别的代码。

webpack 本身并不知道如何去转换,但是有 loaders。把他们想象成转换器。

babel-loader 是 webpack 的一个 loader,可以把 ES6 以上的代码转译成 ES5。

为了使用这个 loader 我们需要去安装一系列的依赖。特别是:

  • babel-core
  • babel-loader
  • babel-preset-env (for compiling Javascript ES6 code down to ES5)

先安了吧:

npm i babel-core babel-loader babel-preset-env --save-dev

下一步我们在项目目录下建立一个 .babelrc 文件用来配置 Babel。

{
"presets": ["env"]
}

配置完成后通过配置文件使用 babel-loader

module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}
]
}

webpack 4:HTML 插件

webpack 需要两个额外的组件去处理 HTML:html-webpack-pluginhtml-loader

先安装:

npm i html-webpack-plugin html-loader --save-dev

webpack 的配置 html-loader


{
test: /\.html$/,
use: [
{
loader: 'html-loader',
options: { minimize: true } // 是否压缩代码
}
]
} ... 插件使用...
plugins: [
new HtmlWebPackPlugin({
template: './src/index.html',
filename: './index.html'
})
]

./src/index.html 新建一个 HTML 文件(模板文件,用来给webpack打包)

最后运行 npm run build 重新打包,查看 ./dist 目录,你会看到运行后的结果。

没有必要在你的 HTML 文件中引入你的 JavaScript:它会自动地注入进去。

在浏览器打开 ./dist/index.html:你可以看到最后的结果。

webpack 4: 提取 CSS 到文件中

mini-css-extract-plugin 插件用来提取 CSS 到文件中。

安装它:

npm i mini-css-extract-plugin css-loader --save-dev

然后建立一个 CSS 文件用来测试:

body {
line-height: 2;
}

配置 loader 和 plugin:

{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader']
} ...插件使用...
new MiniCssExtractPlugin({
filename: '[name].css',
chunkFilename: '[id].css'
})

最后在入口文件中引入 CSS:

import style from './main.css'

构建:

npm run build

查看 ./dist 目录,你应该能看到 CSS 的结果!

重点回顾:extract-text-webpack-plugin 在 webpack 4 中不能用了。请使用 mini-css-extract-plugin

webpack 4:webpack dev server

一旦配置了 webpack dev server 它会在浏览器中加载你的 app。

只要你改变了文件,它会自动地刷新浏览器的页面。

安装下面的包来搭建 webpack dev server

npm i webpack-dev-server --save-dev

然后打开 package.json 调整脚本:

"scripts": {
"dev": "webpack-dev-server --mode development --open",
"build": "webpack --mode production"
}

保存关闭。

现在运行:

npm run dev

你就会看到 webpack dev server 在浏览器中加载你的应用了。

webpack dev server 非常适合用来开发。

聊聊webpack 4的更多相关文章

  1. 聊聊 webpack 打包如何压缩包文件大小

    想必很多人都经历过做完一个项目后,再打包发现某些文件非常大,导致页面加载时很慢,这就很影响用户体验了,所以在我经历了一些打包后,讲讲如何有效地缩小包体积,加快页面的首屏渲染 动态 polyfill 相 ...

  2. Angular企业级开发(2)-搭建Angular开发环境

    1.集成开发环境 个人或团队开发AngularJS项目时,有很多JavaScript编辑器可以选择.使用优秀的集成开发环境(Integrated Development Environment)能节省 ...

  3. webpack4配置详解之新手上路初探

    前言 经常会有群友问起webpack.react.redux.甚至create-react-app配置等等方面的问题,有些是我也不懂的,慢慢从大家的相互交流中,也学到了不少. ​ 今天就尝试着一起来聊 ...

  4. webpack之前端性能优化(史上最全,不断更新中。。。)

    最近在用webpack优化首屏加载性能,通过几种插件之后我们上线前后的速度快了一倍,在此就简单的分享下吧,先上个优化前后首屏渲染的对比图. 可以看到总下载时间从3800ms缩短到1600ms. 我们在 ...

  5. 前端常用技术概述--Less、typescript与webpack

    前言:讲起前端,我们就不能不讲CSS与Javascript,在这两种技术广泛应用的今天,他们的扩展也是层出不穷,css的扩展有Less.Sass.Stylus 等,js的超集有Typescript等. ...

  6. [转] webpack之前端性能优化(史上最全,不断更新中。。。)

    最近在用webpack优化首屏加载性能,通过几种插件之后我们上线前后的速度快了一倍,在此就简单的分享下吧,先上个优化前后首屏渲染的对比图. 可以看到总下载时间从3800ms缩短到1600ms. 我们在 ...

  7. dependencies、devDependencies、webpack打包 的区别与联系

    为什么要在dependencies.devDependencies中声明依赖? 答:保证任何人在(或者你自己在其他设备上)对这个项目进行修改(开发)时,通过npm install就能获取同样的开发环境 ...

  8. 什么是Less、typescript与webpack?

    前端常用技术概述--Less.typescript与webpack 前言:讲起前端,我们就不能不讲CSS与Javascript,在这两种技术广泛应用的今天,他们的扩展也是层出不穷,css的扩展有Les ...

  9. [转]聊聊技术选型 - Angular2 vs Vue2

    转载:https://juejin.im/post/58cab85b44d9040069f38f7a "Come, and take choice of all my library, An ...

随机推荐

  1. SpringBoot——配置文件详解【五】

    前言 SpringBoot的配置文件 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application.properties application.yml 配置文件 ...

  2. USACO Superprime Rib

    洛谷 P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 洛谷传送门 JDOJ 1673: Superprime Rib JDOJ传送门 题目描述 农民约翰的母牛总是产生最好 ...

  3. pychram-redis破解

    1. Preferences -> Plugins-> 选择右下角Browse repositories 2. 搜索Iedis 3. 找到Iedis插件目录:C:\Users\用户名\.P ...

  4. 洛谷p1747好奇怪的游戏题解

    题目 永远不要怀疑劳动人民的智慧! 把快读里最后的return直接返回零的 我已经不是第一次写错了! 我要是再写错我就****** 主要是逆向思维,把从两个点往(1, 1)走想成从(1, 1)点往这两 ...

  5. Codeforces Round 561(Div 2)题解

    这是一场失败的比赛. 前三题应该是随便搞的. D有点想法,一直死磕D,一直WA.(赛后发现少减了个1……) 看E那么多人过了,猜了个结论交了真过了. 感觉这次升的不光彩……还是等GR3掉了洗掉这次把, ...

  6. centos7中将tomcat注册为系统服务

    一.准备环境 操作系统:CentOS Linux release 7.6.1810 (Core) tomcat:apache-tomcat-8.5.41.tar.gz 二.编辑catalina.sh ...

  7. Flask项目之login提交

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/11/2 20:53 # @Author : zoulixiang # @Si ...

  8. GPG实践

    遇见的问题 安装之后没有显示如教程中的 直接提示真实姓名于电子邮件的地址 公钥与密钥 设置吊销证书

  9. 关于微信小程序前端Canvas组件教程

    关于微信小程序前端Canvas组件教程 微信小程序Canvas接口函数 ​ 上述为微信小程序Canvas的内部接口,通过熟练使用Canvas,即可画出较为美观的前端页面.下面是使用微信小程序画图的一些 ...

  10. suface 触控笔

    触控笔直接就可以书写,顶部橡皮擦可用. 但如果要使用笔上的按键(如单击启动OneNote),必须要用蓝牙进行配对.笔使用一节AAAA电池(九号电池)供电. 连接方法: 准备好surface触控笔,并确 ...