webpack那些事儿
Webpack是一个前端资源加载(模块加载器)兼打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
grunt/gulp是优化前端开发流程的工具,webpack是一种模块化解决方案,为了解决可以require不同文件的需求引入了loader,初衷是require everything, bundle everything。webpack的plugins选项挤掉了gulp的市场,而npm/package.json里面的scripts很好用,调用任务写一个简单的命令就行。
grunt、gulp的工作方式:在一个配置文件中,指明对某些文件进行编译,组合,压缩,之后工具会自动完成这些步骤。
webpack的工作方式:通过一个主文件index.js,查找项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。
温馨提示:本篇文章以webpack1.x为例来入门学习webpack。
一、webpack的安装
cnpm是啥东西?电脑系统识别这个命令吗?请看这里。
保证把nodejs,npm,cnpm都安装好后,下面开始安装webpack。可以用windows系统的命令行,也可以用git bash。
cnpm install webpack -g
二、webpack的使用
demo1
A、创建一个目录
mkdir app
B、在app目录中添加main.js文件
document.write("It works。");
C、在app目录中添加index.html文件
<!DOCTYPE html> <html><head><metacharset="utf-8"><title>学习webpack</title></head><body><scripttype="text/javascript"src="bundle.js"></script></body> </html>
D、执行命令
webpack main.js bundle.js
E、在浏览器中打开index.html
即可看到,It works。
demo2
下面以demo1为基础,添加或修改文件。
A、在app目录中添加inner.js文件
module.exports = "It works from inner.js。";
B、更新main.js
document.write(require("./inner.js"));
C、执行命令
webpack main.js bundle.js
D、在浏览器中打开index.html
即可看到,It works from inner.js。
三、webpack的loader
Webpack本身只能处理原生的JavaScript模块,如果要处理其他类型的文件,就需要使用loader进行转换。
所以如果我们需要在项目中添加css文件,就需要使用css-loader和style-loader,css-loader会负责遍历css文件,style-loader会把原来的css代码插入页面中的一个style标签中。
1、安装css-loader
以上面的demo2为基础,在当前目录安装css-loader和style-loader
cnpm install css-loader style-loader
全局安装,需要加-g。
执行以上命令后,会在当前目录生成node_modules文件夹,它就是css-loader和style-loader的安装目录。
2、使用css-loader
首先,在app目录中添加style.css文件
body{color:red; }
其次,介绍3种使用css-loader的方法
方法A:修改main.js文件
require("!style-loader!css-loader!./style.css");
document.write(require("./inner.js"));
执行命令
webpack inner.js bundle.js
在浏览器中打开index.html
即可看到,It works from inner.js字体变红。
方法B:修改main.js文件,在执行命令的时候绑定。
require("./style.css");
document.write(require("./inner.js"));
执行命令
webpack inner.js bundle.js --module-bind 'css=style-loader!css-loader'
在浏览器中打开index.html
即可看到,It works from inner.js字体变红。
方法C:添加配置文件,把编译内容放在文件中,统一管理。
//修改main.js,有两种导入css的方式。//import './style.css'; require('./style.css');
//在app目录中添加webpack.config.js文件 module.exports ={entry:"./main.js",output: {path: __dirname, // __dirname是node.js中的一个全局变量,它指向当前执行脚本所在的目录。filename:"bundle.js"},module: {loaders: [{ test:/\.css$/, loader: "style-loader!css-loader"}]} };
webpack.config.js文件通常放在项目的根目录中,它本身也是一个标准的Commonjs规范的模块。
接下来我们只需要执行webpack命令,即可生成bundle.js文件。
在浏览器中打开index.html
即可看到,It works from inner.js字体变红。
最后,介绍4种使用url-loader的方法
//require require("url-loader?mimetype=image/png!./file.png");//cli webpack --module-bind "png=url-loader?mimetype=image/png"//配置文件 { test: /\.png$/, loader: "url-loader?mimetype=image/png"}//配置文件 {test:/\.png$/,loader:"url-loader",query: { mimetype:"image/png"} }
四、webpack的plugins
webpack自带一些插件(内置插件),你也可以安装一些插件。
下面以BannerPlugin为例,介绍如何安装和使用内置插件。
1、安装内置插件
cnpm install webpack --save-dev
2、修改webpack.config.js文件
var webpack=require('webpack');module.exports={entry:"./main.js",output: {path: __dirname,filename:"bundle.js"},module: {loaders: [{ test:/\.css$/, loader: "style-loader!css-loader"}]},plugins:[new webpack.BannerPlugin('尝试webpack的内置插件');] };
执行命令webpack,打开bundle.js,可以看到文件头部出现了我们指定的注释信息,BannerPlugin插件的作用就是在编译文件中的首部插入注释信息。
上面通过一个main.js入口文件,一个index.html,一个index.js,一个style.css文件,和webpack命令,帮我们生成构建后的bundle.js。
五、常用命令
1、构建一个开发目录
webpack
2、查看所有命令
webpack -h
webpack--help
3、构建一个生产目录,对打包后的文件进行压缩混淆
webpack -p
4、生成map映射文件
webpack -d
5、连续构建,监听
webpack --watch
6、美化展示信息
webpack --colors
7、找出详细的错误信息
webpack --display-error-details
8、使用webpack.config.prod.js配置文件来打包
webpack --config webpack.config.prod.js
六、开发环境
上面都是修改完文件,执行命令后,直接打开index.html,手动刷新看效果。
这里介绍的webpack-dev-server可以实现自动刷新,它是一个小型的Node.js Express静态文件服务器,使用webpack-dev-middleware来服务于webpack的包,安装及使用方法如下。
1、安装和使用
A、安装webpack-dev-server
cnpm install webpack-dev-server -g
B、在app目录中执行webpack-dev-server
webpack-dev-server
如果自动刷新,可以这么做,不要--hot。
webpack-dev-server --inline
C、在浏览器打开http://localhost:8080/
可以浏览项目中的页面和编译后的资源输出。
也可以通过命令打开浏览器,写法如下:
webpack-dev-server --open
webpack-dev-server && open http://localhost:8080 -a 'google chrome'
注意:webpack-dev-server生成的bundle.js包并没有放在真实目录中,而是放在了内存中。
2、两种模式
webpack-dev-server支持两种模式来自动刷新页面,分别是iframe模式和inline模式,这两种模式都支持热模块替换,好处是只替换更新的部分,而不是页面重载。
A、iframe模式
这种模式不用额外配置,只要按照http://localhost:8080/webpack-dev-server/index.html格式访问url即可。
B、inline模式
这种模式,url不用变化,但是需要配置。
先配置webpack.config.js文件,可以参考官网
output:{path:'lib',publicPath:"http://127.0.0.1:8080/lib/",filename:'bundle.js'}, devServer:{contentBase: path.join(__dirname, ""),historyApiFallback:true, //不跳转hot: true,inline:true //实时刷新 }, plugins:[newwebpack.DefinePlugin({'process.env.NODE.ENV':"development"}),newwebpack.HotModuleReplacementPlugin() ]
每次敲一长串命令,是不是有些麻烦呢?配置一下package.json文件即可。
"scripts": {"test": "echo \"Error: no test specified\" && exit 1","start": "webpack","server": "webpack-dev-server --open","build": "webpack-dev-server --inline"}
npm run start 替代 webpack
npm run build 替代 webpack-dev-server --inline
"scripts": {"dev": "webpack-dev-server","build": "webpack --config webpack.config.prod.js"}
运行npm run build来编译生成生产模式下的bundles;
运行npm run dev来生成开发模式下的bundles以及启动本地server。
webpack打包输出真实的文件,而webpack-dev-server开启服务输出的文件只存在于内存中,不输出真实的文件!
做过一些尝试后,你会发现webpack比较灵活,webpack.config.js和package.json对于运行项目来说,都很有用。而且,webpack.config.js文件中的参数发挥的作用等价于package.json文件中的scripts条款,如果不想在命令中拼接太多参数,可以配置webpack.config.js。
七、打包原理
在入口文件中,对每个require资源文件配置一个id。对于同一个资源,不管require多少次,它的id都是一样的,所以无论在多少个文件中require,它都只会打包一份。
转载于:https://www.cnblogs.com/camille666/p/webpack.html
webpack那些事儿相关推荐
- 关于Android工程师转成vue的三两事儿(4)--webpack
最近为了能够写一份值得参考的webpack文档,特意的去查了好多相应的书籍,博客.距离上次写的那篇文章好想也过去将近一周的时间了.我想是时候要准备下一篇文章了.不然就食言而肥了. 算了,技术类文章 ...
- webpack 教程 那些事儿05-多页应用
本篇主要关于如何用webpack构建多页应用 为什么要构建多页应用呢?因为我的项目本来就是多页应用啊 至于为什么要用webpack?因为我要用vue啊,嫌gulp 每次打包慢 啊 文章目录 1. 利用 ...
- webpack组织模块的原理 - 基础篇
现在前端用Webpack打包JS和其它文件已经是主流了,加上Node的流行,使得前端的工程方式和后端越来越像.所有的东西都模块化,最后统一编译.Webpack因为版本的不断更新以及各种各样纷繁复杂的配 ...
- webpack入门学习手记(一)
本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...
- 有些事儿,工程师可能今生仅此一次
郑昀 创建于2016/9/15 最后更新于2016/9/18 关键词:深度思考,碎片化阅读,做论文,深入研究, 早先在<技术高手如何炼成>一文中提到,我会问面试者,你日常如何构建自己的知识 ...
- 用 vue2 和 webpack 快速建构 NW.js 项目(1)
经过实践和学习,发现本篇文章部分内容已经过时,请看我的关于 Vue 和 NW.js 的 最新文章 和相关实践项目 vue-nw-seed . 使用到的技能点 vue2 webpack NW.js No ...
- webpack使用优化(基本篇)
转自:https://github.com/lcxfs1991/blog/issues/2 前言 本文不是webpack入门文章,如果对webpack还不了解,请前往题叶的Webpack入门,或者阮老 ...
- webpack入门学习手记(一) 1
本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...
- webpack 4.0 学习笔记(一)
1.webpack可以做哪些事儿 代码的转换,文件的优化,代码的分割,模块的合并,代码的校验,自动更新,自动发布,等等. 2.安装webpack npm init 新建项目 npm install ...
最新文章
- 微软 AI 设计原则:成为弱者,再带来惊喜
- SAP-ABAP DESCRIBE FIELD 用法
- python怎么播放mp3_python上播放mp3歌曲
- Netty(二)(入门篇)传统的Bio编程
- 学习前端开发,那你值得css的特点有哪些?
- express 设置handlebars模板引擎
- 数据结构c语言版题库填空题,数据结构(C语言版)选择、填空题
- 博途v14电脑要求_博途v15对电脑配置要求
- Linux就业技术指导:简历项目经验示例
- 从安装双系统到TurtleBot3入门教程
- MATLAB等值线绘制
- matlab如何打开flt文件,科学网—grb文件的读取 (更新) - 张凌的博文
- TimeShift QQ群组-欢迎各界友人加入喽
- 一个类的属性调用另一个类的实例
- 密码锁 Locker
- excel表格怎么调整行高和列宽_WPS图文教程:表格使用小技巧
- bili弹幕姬_b站弹幕姬|b站弹幕姬下载_v1.0.1.126官方版_9号软件下载
- PCL读取ply文件
- DE-PPN:Document-level Event Extraction via Parallel Prediction Networks论文解读
- 一阶RC低通滤波器的离散化