webpack已成为现代Web开发中最重要的工具之一。它是一个用于JavaScript的模块打包工具,但是它也可以转换所有的前端资源,例如HTML和CSS,甚至是图片。它可以让你更好地控制应用程序所产生的HTTP请求数量、允许你使用其他资源的特性(例如Jade、Sass和ES6)。webpack还可以让你轻松地从npm下载包。

本文主要针对那些刚接触webpack的同学,将介绍初始设置和配置、模块、加载器、插件、代码分割和热模块替换。
在继续学习下面的内容之前需要确保你的电脑中已经安装了Node.js。
初始配置
使用npm初始化一个新项目并安装webpack:
mkdir webpack-demo cd webpack-demo npm init -y npm install webpack@beta --save-dev mkdir src touch index.html src/app.js webpack.config.js
编写下面这些文件:
<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Hello webpack</title> </head> <body> <div id="root"></div> <script src="dist/bundle.js"></script> </body> </html>
// src/app.js
const root = document.querySelector('#root')
root.innerHTML = `<p>Hello webpack.</p>`
// webpack.config.js
const webpack = require('webpack')
const path = require('path')
const config = {
context: path.resolve(__dirname, 'src'),
entry: './app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [{
test: /\.js$/,
include: path.resolve(__dirname, 'src'),
use: [{
loader: 'babel-loader',
options: {
presets: [
['es2015', { modules: false }]
]
}
}]
}]
}
}
module.exports = config
上面的配置是一个普通的出发点,它通知webpack将入口文件src/app.js编译输出到文件/dist/bundle.js中、使用babel将所有的.js文件从ES2015转换成ES5。
为了让它可以转换到ES5格式的JS文件,我们需要安装三个包:babel-core、webpack加载器babel-loader和预置babel-preset-es2015。使用{ modules: false }让Tree Shaking 从打包文件中删除未使用的导出项(exports)以减少文件大小。
npm install babel-core babel-loader babel-preset-es2015 --save-dev
最后,用以下内容替换package.json的scripts部分:
"scripts": {
"start": "webpack --watch",
"build": "webpack -p"
},
在命令行中运行npm start将以监视模式启动webpack,当src目录中的.js文件更改时,它将重新编译bundle.js。控制台中的输出展示了打包文件的信息,注意打包文件的数量和大小十分重要。
现在当你在浏览器中加载index.html页面时会看到"Hello webpack."。
open index.html
打开dist/bundle.js文件看看webpack都做了哪些事情,顶部是webpack的模块引导代码,底部是我们的模块。到目前为止,你可能对于这个还没有一个深刻的印象。但是现在你可以开始编写ES6模块,webpack将生成适用于所有浏览器的打包文件。
使用Ctrl + C停止webpack,运行npm run build以生产模式编译我们的bundle.js。
注意,打包文件的大小从2.61 kB减少到了585字节。再看一下dist/bundle.js文件,你会看到大量难懂的代码,因为我们使用UglifyJS压缩了它。这样的话,我们可以使用更少的代码达到与之前一样的效果。
模块
优秀的webpack知道如何使用各种格式的JavaScript模块,最著名的两个是:
我们可以通过安装、导入lodash来测试这些格式的模块。
npm install lodash --save
// src/app.js
import {groupBy} from 'lodash/collection'
const people = [{
manager: 'Jen',
name: 'Bob'
}, {
manager: 'Jen',
name: 'Sue'
}, {
manager: 'Bob',
name: 'Shirley'
}, {
manager: 'Bob',
name: 'Terrence'
}]
const managerGroups = groupBy(people, 'manager')
const root = document.querySelector('#root')
root.innerHTML = `<pre>${JSON.stringify(managerGroups, null, 2)}</pre>`
运行npm start启动webpack并刷新index.html,你可以看到一个根据manager分组的数组。
让我们将这个数组转移到它自己的模块people.js中。
// src/people.js
const people = [{
manager: 'Jen',
name: 'Bob'
}, {
manager: 'Jen',
name: 'Sue'
}, {
manager: 'Bob',
name: 'Shirley'
}, {
manager: 'Bob',
name: 'Terrence'
}]
export default people
我们可以在app.js中使用相对路径轻松的导入它。
// src/app.js
import {groupBy} from 'lodash/collection'
import people from './people'
const managerGroups = groupBy(people, 'manager')
const root = document.querySelector('#root')
root.innerHTML = `<pre>${JSON.stringify(managerGroups, null, 2)}</pre>`
注意:像lodash/collection这样没有相对路径的导入是导入安装在/node_modules的模块,你自己的模块需要一个类似./people的相对路径,你可以以此区分它们。
加载器
我们已经介绍过,你可以通过配置像babel-loader这样的加载器来告诉webpack在遇到不同文件类型的导入时该怎么做。你可以将多个加载器组合在一起,应用到很多文件转换中。在JS中导入.sass文件是一个非常的例子。
Sass
这种转换涉及三个单独的加载器和node-sass库:
npm install css-loader style-loader sass-loader node-sass --save-dev
在配置文件中为.scss文件添加新规则。
// webpack.config.js
rules: [{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
}, {
// ...
}]
注意: 任何时候更改webpack.config.js中的任意一个加载规则都需要使用Ctrl + C和npm start重新启动构建。
加载器序列以相反的顺序进行处理:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# webpack
# 模块打包
# 模块化打包
# 按模块打包
# webpack独立打包和缓存处理详解
# Webpack打包慢问题的完美解决方法
# 彻底解决 webpack 打包文件体积过大问题
# 详解webpack+vue-cli项目打包技巧
# 详解如何用webpack打包一个网站应用项目
# Vue项目webpack打包部署到服务器的实例详解
# Webpack 服务器端代码打包的示例代码
# 加载
# 你可以
# 自己的
# 让你
# 我们可以
# 是一个
# 还没
# 还可以
# 让我们
# 多个
# 你会
# 最重要
# 你在
# 适用于
# 它是
# 你可
# 它可以
# 可以使用
# 怎么做
# 将以
相关文章:
高端智能建站公司优选:品牌定制与SEO优化一站式服务
建站主机选购指南:核心配置优化与品牌推荐方案
建站之星2.7模板:企业网站建设与h5定制设计专题
c++ stringstream用法详解_c++字符串与数字转换利器
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
香港网站服务器数量如何影响SEO优化效果?
安徽网站建设与外贸建站服务专业定制方案
如何通过山东自助建站平台快速注册域名?
香港服务器租用费用高吗?如何避免常见误区?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
免费网站制作appp,免费制作app哪个平台好?
如何配置IIS站点权限与局域网访问?
如何基于PHP生成高效IDC网络公司建站源码?
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何选择CMS系统实现快速建站与SEO优化?
html制作网站的步骤有哪些,iapp如何添加网页?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何在腾讯云免费申请建站?
手机网站制作与建设方案,手机网站如何建设?
常州自助建站费用包含哪些项目?
建站之星如何通过成品分离优化网站效率?
Python文件管理规范_工程实践说明【指导】
建站主机服务器选购指南:轻量应用与VPS配置解析
大连网站设计制作招聘信息,大连投诉网站有哪些?
如何在宝塔面板创建新站点?
如何批量查询域名的建站时间记录?
建站主机与虚拟主机有何区别?如何选择最优方案?
山东网站制作公司有哪些,山东大源集团官网?
建站之星在线版空间:自助建站+智能模板一键生成方案
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
制作证书网站有哪些,全国城建培训中心证书查询官网?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
已有域名和空间,如何快速搭建网站?
已有域名能否直接搭建网站?
山东云建站价格为何差异显著?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
三星网站视频制作教程下载,三星w23网页如何全屏?
如何通过西部建站助手安装IIS服务器?
建站之星安装失败:服务器环境不兼容?
如何在万网自助建站中设置域名及备案?
黑客入侵网站服务器的常见手法有哪些?
如何安全更换建站之星模板并保留数据?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何登录建站主机?访问步骤全解析
宝塔面板创建网站无法访问?如何快速排查修复?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
*请认真填写需求信息,我们会在24小时内与您取得联系。