概述

Webpack是一款用户打包前端模块的工具。主要是用来打包在浏览器端使用的javascript的。同时也能转换、捆绑、打包其他的静态资源,包括css、image、font file、template等。个人认为它的优点就是易用,而且常用功能基本都有,另外可以通过自己开发loader和plugin来满足自己的需求。这里就尽量详细的来介绍下一些基本功能的使用。

上一篇已经介绍如何安装了,这里就不再重复了。

运行webpack

webpack需要编写一个config文件,然后根据这个文件来执行需要的打包功能。我们现在来编写一个最简单的config。新建一个文件,命名为webpack-config.js。config文件实际上就是一个Commonjs的模块。内容如下:

var webpack = require('webpack');
var path = require('path');
var buildPath = path.resolve(__dirname,"build");
var nodemodulesPath = path.resolve(__dirname,'node_modules');var config = {//入口文件配置entry:path.resolve(__dirname,'src/main.js'),resolve:{extentions:["","js"]//当requrie的模块找不到时,添加这些后缀},//文件导出的配置output:{path:buildPath,filename:"app.js"}
}module.exports = config;

  我的目录结构是这样的:

webpack|---index.html|---webpack-config.js|---src|---main.js|---js|---a.js

  main.js文件内容如下:

var a = require('./js/a');
a();
console.log('hello world');
document.getElementById("container").innerHTML = "<p>hello world</p>";

  a.js文件内容如下:

module.exports = function(){console.log('it is a ');
}

  然后我们执行如下的命令:

webpack --config webpack-config.js --colors

  这样我们就能在目录里面看到一个新生成的目录build,目录结构如下:

webpack|---index.html|---webpack-config.js|---build|---app.js

  然后引用app.js就Ok啦。main.js和模块a.js的内容就都打包到app.js中了。这就演示了一个最简单的把模块的js打包到一个文件的过程了。

如何压缩输出的文件

plugins: [//压缩打包的文件new webpack.optimize.UglifyJsPlugin({compress: {//supresses warnings, usually from module minificationwarnings: false}})]

  

如何copy目录下的文件到输出目录

copy文件需要通过插件"transfer-webpack-plugin"来完成。

安装:

npm install transfer-webpack-plugin  -save
var TransferWebpackPlugin = require('transfer-webpack-plugin');
//其他节点省略
plugins: [//把指定文件夹下的文件复制到指定的目录new TransferWebpackPlugin([{from: 'www'}], path.resolve(__dirname,"src"))]

  

打包javascript模块

支持的js模块化方案包括:

  • ES6 模块

    import MyModule from './MyModule.js';

  • CommonJS

    var MyModule = require('./MyModule.js');

  • AMD

    define(['./MyModule.js'], function (MyModule) {});

ES6的模块需要配置babel-loader

打包静态资源

安装css-loader和style-loader

npm install css-loader --save -dev
npm install style-loader --save -dev

  

var config = {entry:path.resolve(__dirname,'src/main.js'),resolve:{extentions:["","js"]},output:{path:buildPath,filename:"app.js"},module:{loaders:[{test:/\.css$/,loader:'style!css',exclude:nodemodulesPath}]}
}

  style-loader会把css文件嵌入到html的style标签里,css-loader会把css按字符串导出,这两个基本都是组合使用的。打包完成的文件,引用执行后,会发现css的内容都插入到了head里的一个style标签里。如果是sass或less配置方式与上面类似。

可以通过url-loader把较小的图片转换成base64的字符串内嵌在生成的文件里。安装:

npm install url-loader --save -dev

  config配置:

var config = {entry:path.resolve(__dirname,'src/main.js'),resolve:{extentions:["","js"]},output:{path:buildPath,filename:"app.js"},module:{loaders:[{test:/\.css$/,loader:'style!css',//exclude:nodemodulesPath},{ test:/\.png$/,loader:'url-loader?limit=10000'}//限制大小小于10k的]}
}

  

公用的模块分开打包

这需要通过插件“CommonsChunkPlugin”来实现。这个插件不需要安装,因为webpack已经把他包含进去了。接着我们来看配置文件:

var config = {entry:{app:path.resolve(__dirname,'src/main.js'),vendor: ["./src/js/common"]},//【1】注意这里resolve:{extentions:["","js"]},output:{path:buildPath,filename:"app.js"},module:{loaders:[{test:/\.css$/,loader:'style!css',exclude:nodemodulesPath}]},plugins:[new webpack.optimize.UglifyJsPlugin({compress: {warnings: false}}),//【2】注意这里  这两个地方市用来配置common.js模块单独打包的new webpack.optimize.CommonsChunkPlugin({name: "vendor",//和上面配置的入口对应filename: "vendor.js"//导出的文件的名称})]
}

  执行webpack会生成app.js和vendor.js两个文件.

多个入口

var config = {    entry:{m1:path.resolve(__dirname,'src/main.js'),m2:path.resolve(__dirname,'src/main1.js'),vendor: ["./src/js/common"] //【1】注意这里},//注意在这里添加文件的入口resolve:{extentions:["","js"]},output:{path:buildPath,filename:"[name].js"//注意这里使用了name变量}
}

  

webpack-dev-server

在开发的过程中个,我们肯定不希望,每次修改完都手动执行webpack命令来调试程序。所以我们可以用webpack-dev-server这个模块来取代烦人的执行命令。它会监听文件,在文件修改后,自动编译、刷新浏览器的页面。另外,编译的结果是保存在内存中的,而不是实体的文件,所以是看不到的,因为这样会编译的更快。它就想到与一个轻量的express服务器。安装:

npm install webpack-dev-server --save -dev

  config配置:

var config = {entry:path.resolve(__dirname,'src/main.js'),resolve:{extentions:["","js"]},//Server Configuration optionsdevServer:{contentBase: '',  //静态资源的目录 相对路径,相对于当前路径 默认为当前config所在的目录devtool: 'eval',hot: true,        //自动刷新inline: true,    port: 3005        },devtool: 'eval',output:{path:buildPath,filename:"app.js"},plugins: [new webpack.HotModuleReplacementPlugin(),//这个好像也是必须的,虽然我还没搞懂它的作用new webpack.NoErrorsPlugin()]
}

  

执行命令:

webpack-dev-server --config webpack-dev-config.js  --inline --colors

  

默认访问地址: http://localhost :3000/index.html(根据配置会不一样)

有一点需要声明,在index.html(引用导出结果的html文件)里直接引用“app.js”,不要加父级目录,因为此时app.js在内存里与output配置的目录无关:

<script type="text/javascript" src="app.js"></script>

  

具体参考:http://webpack.github.io/docs/webpack-dev-server.html

转载于:https://www.cnblogs.com/laneyfu/p/6131441.html

WebPack常用功能介绍相关推荐

  1. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  2. 大白菜软件常用功能介绍

    大白菜软件常用功能介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.刻录光盘介绍 1.选择你需要的刻录的光盘 2.点击刻录光盘 3.确认之后点击刻录 4.等待刻录完成 转载于 ...

  3. 程序猿二三事之工具使用-Eclipse调试Java常用功能介绍

    [ TOC ] 调试常用功能介绍 日常java开发中实际写代码的时间并不会很多,花在整理思路,代码重构,调试bug会占用很大部分时间. 熟练掌握调试工具,了解调试相关技巧,是java开发中减少调试时间 ...

  4. Cloudconpare常用功能介绍

    Cloudconpare常用功能 介绍 加载 保存 颜色 渲染 裁剪 合并 滤波 克隆 旋转 抽稀 量距 介绍 Cloudconpare是一款很好用的点云数据处理软件,完全可以满足平时的点云学习要求, ...

  5. DiskGenius常用功能介绍

    DiskGenius常用功能介绍 DiskGenius是我非常喜欢的一个磁盘分区工具,具有快速分区,分区大小调整,磁盘坏道检测等功能,可谓系统安装必备软件. 常用功能: 1.磁盘分区: 2.磁盘坏道检 ...

  6. Android开发自学笔记—1.1(番外)AndroidStudio常用功能介绍

    Android开发自学笔记-1.1(番外)AndroidStudio常用功能介绍 http://www.cnblogs.com/boyliupan/p/4729736.html#_labelTop 回 ...

  7. stm32温度控制按键_干货 | STM32常用功能介绍

    RM校内赛就在眼前,但是咸鱼了一个寒假,对比赛毫无准备,肿么办?? 莫得事!因为我们给大噶带来了新一波干货!今天介绍的STM32单片机,能统领"虾兵蟹将", 大噶好我们是虾兵蟹将( ...

  8. android 最新功能介绍,Android Studio 常用功能介绍

    界面介绍 讲解1 这个界面,显示了我们使用 Android Studio时经常接触到的功能面板. Project 面板. 用于浏览项目文件. Project 面板会显示当前的所有的 module .  ...

  9. Charles使用及常用功能介绍

    Charles是一款常用的网络抓包工具,启动Charles后,会自动开启的浏览器代理进行网络请求截取,Charles和Fiddler基本功能差不多,只是Fiddler是免费的,但是没有MAC版,Cha ...

最新文章

  1. 36岁,程序员,为公司工作8年,昨天HR说公司不准备续约
  2. 用libtommath实现RSA算法
  3. 游戏开发之拷贝构造函数,即复制构造函数(explicit关键字及拷贝构造函数的调用时机)(C++基础)
  4. Spring请求参数测试
  5. atitit.二进制数据无损转字符串网络传输
  6. 精心梳理二十二道常见SSM面试题(带答案)
  7. pt100热电阻计算公式C语言,PT100计算公式
  8. 第1-6课:绘制箱线图、饼图和直方图
  9. Coggle 30 Days of ML(Spaceship Titanic)
  10. JavaWeb核心技术——RequestResponse用户登录注册案例
  11. linux取整个日志文件,高效日志分析 - 人人必学的awk
  12. 我国著名的计算机科学家,我国著名计算机科学家、西安交大郑守淇教授逝世
  13. 微信小程序 小程序全局数据共享(笔记)
  14. 2021江苏连云港高考成绩查询时间,2021年江苏连云港高考时间:6月7日至9日
  15. Jenkin前端项目部署----远程服务
  16. Linux 命令ps aux命令解析
  17. 图像采集数据集整理和扩充方案(含代码)
  18. 影视站长必备资料合集
  19. 优秀的持久层框架-Mybatis(上)
  20. EOJ 3260:袋鼠妈妈找孩子

热门文章

  1. java set集合与List集合练习
  2. 7月最新发布10.2.0.4.5 Patch Set Update
  3. Lucene.Net.Search.Highlight.FragmentQueue 中的派生方法 LessThan 不能减少访问
  4. ES6——Promise 对象
  5. 计算机网络学习笔记(0. 引言)
  6. 【Vue】—异步组件
  7. 2021年6月20日 是第111个父亲节,祝福所有的父亲节日快乐
  8. python编写的心得_Python开发之我的小心得
  9. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析
  10. 小户型吊顶的注意事项有哪些