前言

这是我第一篇介绍webpack的文章,先从一个入门教程开始吧,后续会有更多相关webpack的文章推出。
首先什么是webpack?如果说它是一个打包工具那真的是有点大材小用了。我个人认为webpack是一个集前端自动化、模块化、组件化于一体的可拓展系统,你可以根据自己的需要来进行一系列的配置和安装,最终实现你需要的功能并进行打包输出。
本文作为一篇入门教程,这里先从webpack最简单的3招开始介绍,即拆分、打包、压缩。
步骤
1.传统项目中的问题
在不依赖任何自动化、模块化工具的项目中,通常我们的代码是这样的:
index.html
<html> <head> <title>传统项目</title> <script src="https://code.jquery.com/jquery-2.2.4.js"></script> </head> <body> <script src="app/index.js"></script> </body> </html>
app/index.js
function main() {
$('body').html('hello world!');
}
main();
以上示例中,脚本之间存在着隐式依赖关系。
index.js取决于被包括在页面运行之前的jQuery,它只是假设有一个全局变量$的存在。
这样管理JavaScript项目有一些问题:
如果依赖项丢失,或者包含在错误的顺序中,应用程序将不会运行。
如果包含依赖项但没有使用,那么浏览器必须下载很多不必要的代码。
所以为了解决以上问题,我们需要使用webpack来实现一些改变。
2.准备
首先我们得在项目中安装webpack,我们打开命令行工具运行:
mkdir demo && cd demo // 新建demo文件夹并打开 npm init // 初始化npm,生成package.json配置文件 npm install --save-dev webpack@beta // 安装webpack2.0版本,mac系统可能需要添加sudo命令
以上使用的npm命令需要安装node.js,可以点击这里安装即可:node.js
为了改进上方传统项目中的不足,我们这里还需要安装jQuery:
npm install --save jQuery // 安装jQuery
3.改变
改变后的index.js
var $ = require('jquery');
function main() {
$('body').html('hello world!');
}
main();
这里我们可以直接在index.js里引用jQuery,index.js明确要求jQuery的存在,这样就不存在隐式依赖的问题(没有全局污染)。
改变后的index.html
<html> <head> <title>webpack项目</title> </head> <body> <script src="dist/bundle.js"></script> </body> </html>
这里我们的index.html文件只引入了最终打包后的bundle.js。现在运行webpack命令将index.js输出为bundle.js。
运行命令:webpack app/index.js dist/bundle.js
webpack app/index.js dist/bundle.js
Hash: 3bb91a6dedfc2a2a1c08
Version: webpack 2.2.0-rc.4
Time: 397ms
Asset Size Chunks Chunk Names
bundle.js 270 kB 0 [emitted] [big] main
[0] ./~/jquery/dist/jquery.js 267 kB {0} [built]
[1] ./app/index.js 83 bytes {0} [built]
最终我们在浏览器中打开index.html页面可以看到输出的“hello world!”。
4.拆分
现在如果我们index.js中的”hello world!”字符串需要放到另外一个hello.js中,然后在index.js中引入使用的话,这就涉及到webpack模块拆分的功能。
app/index.js
var $ = require('jquery');
var str = require('./hello.js');
function main() {
$('body').html(str);
}
main();
app/hello.js
var str = 'hello world!'; module.exports = str;
我们在hello.js中通过module.exports导出str变量,然后在index.js通过require导入同样可以实现浏览器中输入“hello world!”的效果,当然我们需要重新运行下webpack命令:webpack app/index.js dist/bundle.js
5.打包
其实在上面我们已经使用了打包命令:
webpack app/index.js dist/bundle.js
其中的app/index.js即为打包的入口文件,而dist/bundle.js为输出文件。
但是我们会发现这样的命令不利于我们复杂项目配置的使用,对于更复杂的配置,我们可以利用配置文件webpack.config.js来统一管理。
我们可以在demo文件夹下新建webpack.config.js配置文件:
module.exports = {
entry: './app/index.js',
output: {
filename: 'bundle.js',
path: './dist'
}
}
上方配置中的entry就是我们的入口文件,可以有多个入口文件,而output即为webpack打包的输入对象,filename为输出文件名,path为输出路径。
如此我们运行命令行:
webpack --config webpack.config.js
同样可以生成打包目录dist及打包文件bundle.js。
当然你也可以直接运行简化的命令:
webpack
webapck会自动去寻找当前目录下的webpack.config.js文件。
6.压缩
上一步我们利用webpack命令将多个多件打包到了一个bundle.js的文件中,但是并未进行压缩,你可以打开bundle.js进行查看。
而如果我们需要对打包后的代码进一步压缩处理,我们可以运行命令:
webpack -p
这时我们可以来进行下打包和压缩的文件大小对比
打包命令:webpack
webpack
Hash: ab4a1091f0880100eab0
Version: webpack 2.2.0-rc.4
Time: 387ms
Asset Size Chunks Chunk Names
bundle.js 270 kB 0 [emitted] [big] main
[0] ./app/hello.js 50 bytes {0} [built]
[1] ./~/jquery/dist/jquery.js 267 kB {0} [built]
[2] ./app/index.js 114 bytes {0} [built]
输出的bundle.js整个文件大小为270 kB。
压缩命令:webpack -p
webpack -p
Hash: ab4a1091f0880100eab0
Version: webpack 2.2.0-rc.4
Time: 1967ms
Asset Size Chunks Chunk Names
bundle.js 88.3 kB 0 [emitted] main
[0] ./app/hello.js 50 bytes {0} [built]
[1] ./~/jquery/dist/jquery.js 267 kB {0} [built]
[2] ./app/index.js 114 bytes {0} [built]
输出的bundle.js整个文件大小为88.3 kB。
很明显,文件被压缩了。
7.进一步压缩优化
上方我们通过webpack的压缩命令将文件打包并压缩了,但是对于webpack -p压缩后的文件来说其实还有压缩的余地。如果你使用的是webpack1.0,那么你可以在配置文件中添加plugins配置项,并且加入如下插件:
var webpack = require('webpack');
module.exports = {
...
plugins:[
// 去除代码块内的告警语句
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
}),
// 优先考虑使用最多的模块,并为它们分配最小的ID
new webpack.optimize.OccurenceOrderPlugin()
]
...
}
而本示例中使用的是webpack2.0版本,在2.0中UglifyJsPlugin的compress选项默认为false,并且OccurrenceOrderPlugin默认启用,所以无需进行配置。
结语
本文主要介绍了webpack入门的一些简单命令和基本配置信息,从代码拆分、打包、压缩的角度和传统的前端项目进行对比,希望以此加深大家对webpack基础知识的印象。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# webpack
# 详解webpack + vue + node 打造单页面(入门篇)
# react.js使用webpack搭配环境的入门教程
# webpack学习--webpack经典7分钟入门教程
# 详解webpack 入门总结和实践(按需异步加载
# css单独打包
# 生成多个入口文件)
# webpack入门+react环境配置
# webpack+vue.js快速入门教程
# 详解webpack 入门与解析
# 的是
# 我们可以
# 你可以
# 配置文件
# 多个
# 即为
# 命令行
# 自己的
# 是一个
# 器中
# 如果你
# 大材小用
# 会有
# 隐式
# 最多
# 是这样
# 就不
# 你也
# 它是
# 这就
相关文章:
如何在香港服务器上快速搭建免备案网站?
如何注册花生壳免费域名并搭建个人网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Swift中switch语句区间和元组模式匹配
昆明网站制作哪家好,昆明公租房申请网上登录入口?
制作网站外包平台,自动化接单网站有哪些?
如何选择高效便捷的WAP商城建站系统?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何在云虚拟主机上快速搭建个人网站?
建站之星2.7模板:企业网站建设与h5定制设计专题
如何在IIS服务器上快速部署高效网站?
北京网站制作网页,网站升级改版需要多久?
高端网站建设与定制开发一站式解决方案 中企动力
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
移民网站制作流程,怎么看加拿大移民官网?
建站之星安装路径如何正确选择及配置?
如何用y主机助手快速搭建网站?
如何彻底删除建站之星生成的Banner?
如何在IIS7上新建站点并设置安全权限?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在阿里云香港服务器快速搭建网站?
香港网站服务器数量如何影响SEO优化效果?
魔方云NAT建站如何实现端口转发?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何在七牛云存储上搭建网站并设置自定义域名?
Thinkphp 中 distinct 的用法解析
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
深入理解Android中的xmlns:tools属性
javascript中对象的定义、使用以及对象和原型链操作小结
定制建站价位费用解析与套餐推荐全攻略
如何挑选最适合建站的高性能VPS主机?
建站之星代理费用多少?最新价格详情介绍
如何确认建站备案号应放置的具体位置?
制作表格网站有哪些,线上表格怎么弄?
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站之星如何快速更换网站模板?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
建站主机与服务器功能差异如何区分?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何在万网自助建站平台快速创建网站?
网站制作需要会哪些技术,建立一个网站要花费多少?
建站上传速度慢?如何优化加速网站加载效率?
PHP 500报错的快速解决方法
网站制作免费,什么网站能看正片电影?
建站之星如何实现PC+手机+微信网站五合一建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。