webpack构建工具快速上手指南
最近在研究react项目,接触到webpack打包工具。刚接触的时候一脸茫然,经过最近的学习,下面我来带大家开启webpack入门之旅。
webpack是什么
webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX)、样式(含less/sass)、图片等都作为模块来使用和处理。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成少量的 bundle - 通常只有一个,由浏览器加载。 当然做react项目也可以不用webpack构建工具,可以用gulp或者grunt等构建工具,但是GitHub 上面rect相关项目都是用webpack来构建的,官方推荐也是webpack更为合适,所以我们没有理由不掌握它。
Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的入口文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。
webpack 的优势
在webpack看来一切都是模块,包括javascript、css以及图片等。
开发便捷,能替代部分 grunt/gulp 的工作,比如打包、压缩混淆、图片转base64等。。
扩展性强,插件机制完善。
webpack文件配置
webpack有四个核心概念:入口(entry)、输出(output)、加载器(loader)、插件(plugins)。下面来看一下webpack.config.js文件
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin'); //css单独打包插件
module.exports = {
//页面入口文件
entry: {
app: './src/app'
},
//打包文件输出配置
output: {
path: 'dist/js',//打包输出路径
filename: '[name].min.js',//文件名字
},
//自动扩展文件后缀名,意味着我们在项目中import模块可以省略不写后缀名
resolve: {
extensions: ['.js', '.jsx']
},
//模块加载器(图片/js/css/等等)
module: {
rules: [{
test: /\.(js|jsx)$/,
exclude: /^node_modules$/,
use: [{
loader: 'babel-loader',
options: {
presets: ['es2015', 'react'],
plugins: ["transform-object-rest-spread"]
}
}]
},{
test: /\.less$/,
exclude: /^node_modules$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader!less-loader'
})
}, {
test: /\.(png|jpg|gif)$/,
exclude: /^node_modules$/,
include: path.resolve(__dirname, './img'),
loader: 'url-loader',
options: {
limit: 8192 //图片文件小于8kb的直接转为base64
}
}]
},
//插件项(这里用里一个css单独打包,否则css文件会和js文件打包在一起)
plugins: [
new ExtractTextPlugin("styles.min.css")
]
}
生产环境webpack.prod.js配置
webpack 自带了 UglifyJsPlugin,它运行 UglifyJS来压缩输出文件。
// webpack.prod.js
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = {
/*...*/
new webpack.optimize.UglifyJsPlugin({
output: {
comments: false // 删除注释
},
compress: {
warnings: false // 不显示警告,默认为false
}
}),
new HtmlWebpackPlugin({ //根据模板插入css/js等生成最终HTML
filename: 'build/', //生成的html存放路径
template: './src/template/index.html', //html模板路径
hash: true, //为静态资源css文件和js生成hash值
title: '口袋',
favicon: './img/favicon.ico',
inject: true, //所有js资源放到body底部
minify: {
removeComments: true, //去掉注释
collapseWhitespace: true, //去掉空格
minifyCSS: true, //压缩html里的css
minifyJS: true //压缩html里的js
}
}),
};
html-webpack-plugin插件详解请看(https://www.npmjs.com/package/html-webpack-plugin)
安装方法
$ npm install webpack -g
运行webpack
webpack --display-error-details 后面参数“--display-error-details”是推荐加上的,方便出错时能更好定位到问题。 其他主要参数有:
$ webpack --watch //监听变动并自动打包
$ webpack -p //压缩混淆脚本
$ webpack -d //生成map映射文件,告知哪些模块被最终打包到哪里了
下面我们添加一个用于启动 webpack 的 npm script 脚本:
package.json
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --config webpack.config.js --inline --hot",
"build": "webpack --config webpack.prod.config.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"css-loader": "^0.28.4",
"csv-loader": "^2.1.1",
"file-loader": "^0.11.2",
"html-webpack-plugin": "^2.29.0",
"style-loader": "^0.18.2",
"webpack": "^3.0.0",
}
}
开发环境运行方法
使用 webpack-dev-server 开发服务是一个更好的选择。webpack-dev-server是一个小型的Node.js Express服务器,它将启动一个 express 静态资源 web 服务器,并且会以监听模式自动运行 webpack,在浏览器打开 http://localhost:8080/ (端口号可配置) 可以浏览项目中的页面和编译后的资源输出,并且通过一个 socket.io 服务实时监听它们的变化并自动刷新页面。
有一点需要注意的是:webpack-dev-server启动项目生成的包并没有放在你的真实目录中,而是放在了内存中,你从chrome浏览器中Source面板中可以看见.
现在,我们可以在命令行中运行 npm start,就会看到浏览器自动加载页面。如果现在修改和保存任意源文件,web 服务器就会自动重新加载编译后的代码。赶紧试一下!
生产环境运行方法
使用 npm run build启动项目
基于 webpack 指引就写到这里,要是看了之后能够让一脸的茫然的你豁然开朗,可以请我喝咖啡,你也可以参考下述的文章来入门:
[http://zhaoda.net/webpack-handbook/install.html]
[http://webpack.github.io/docs/]
webpack构建工具快速上手指南的更多相关文章
- 深入浅出的webpack构建工具---AutoDllPlugin插件(八)
深入浅出的webpack构建工具---AutoDllPlugin插件(八) DllPlugin插件能够快速打包,能把第三方依赖的文件能提前进行预编译打包到一个文件里面去.提高了构建速度.因为很多第三方 ...
- Rancher 快速上手指南操作(1)
Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...
- UnityShader快速上手指南(三)
简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...
- [转]Rancher 快速上手指南操作(1)
本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...
- 深入浅出的webpack构建工具--webpack4+vue搭建环境 (十三)
深入浅出的webpack构建工具--webpack4+vue搭建环境 (十三) 从上面一系列的webpack配置的学习,我们现在来使用webpack来搭建vue的开发环境.首先我们来设想下我们的项目的 ...
- 深入浅出的webpack构建工具---DevServer配置项(二)
深入浅出的webpack构建工具---DevServer配置项(二) 阅读目录 DevServer配置项 1. contentBase 2. port 3. host 4. headers 5. hi ...
- 深入浅出的webpack构建工具---webpack基本配置(一)
深入浅出的webpack构建工具---webpack基本配置(一) 阅读目录 一:webpack入门构建: 1. 安装webpack到全局 2. 安装webpack到本项目. 3. 如何使用webpa ...
- 翻译-QPKG开发工具快速开始指南
QPKG开发工具快速开始指南 指导你编译你自己的QPKG软件包 目录 什么是QDK 下载QDK 安装QDK 编译你自己的QPKG软件包 搭建QPKG编译环境 配置QPKG 定制QPKG程序 向QPKG ...
- Markdown快速上手指南
Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...
随机推荐
- WIN10平板如何打开文件夹选项
打开计算机,然后查看,最后可以找到选项
- N1, T1刷机记录
硬件配置 N1和T1使用的是晶晨Amlogic方案的芯片, 配置明细分别如下, 都是现在盒子的主流配置 N1CPU: Amlogic S905, ARM Cortex-A53 四核 up to 2.0 ...
- 预防 app crash 之 unrecognized selector
处理unrecognized selector异常原因 假如封装一个方法,在其他模块调用该方法时,传入参数不匹配则crash.比如下面的方法:本应该传入的参数类型为NSMutableArray,如果传 ...
- oradim新建服务后,登录数据库报ORA-12560错误
> oradim -new -sid mydb 实例已创建. > sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Production on 星期二 ...
- Latex学习(一)
要在整个系统中使用TEX Live的字体(假定你有足够的权限),请依照下面的步骤来做: 1.将texlive-fontconfig.conf文件复制到/etc/fonts/conf.d/09-texl ...
- struts2 + urlrewrite 整合注意事项
这几天业余时间在玩百度云,百度的云还是不错的,但是对于我这样的.NET程序员,有点不公平,没有.net虚机,不过也不是百度一家没有,基本都没有,有的都是那种开放云,自已在云端来部署安装软件的. 所以也 ...
- 译:9.使用Redis进行消息传递
本指南引导您完成使用Spring Data Redis发布和订阅通过Redis发送的消息的过程.Messaging with Redis 1. 我们将构建什么? 您将构建一个使用StringRedis ...
- 常用七种排序的python实现
1 算法复杂度 算法复杂度分为时间复杂度和空间复杂度.其中, 时间复杂度是指执行算法所需要的计算工作量:而空间复杂度是指执行这个算法所需要的内存空间. 算法的复杂性体现在运行该算法时的计算机所需资源的 ...
- left join、right join、inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- ubuntu下使用golang、qml与ubuntu sdk开发桌面应用 (简单示例)
找了很长时间go的gui库,试了gtk,准备试qt的时候发现了这个qml库,试了下很好用. ##准备工作 **1.Go 1.2RC1** go的版本应该不能低于这个,我是在1.2RC发布当天升级后发现 ...