WebPack常用功能介绍

时间:2021-10-14 22:50:00

概述

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 minification
warnings: 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两个文件.

WebPack常用功能介绍

多个入口

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常用功能介绍

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 options
devServer:{
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

WebPack常用功能介绍的更多相关文章

  1. &lbrack;转&rsqb;WebPack 常用功能介绍

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

  2. 3&period;Nginx常用功能介绍

    Nginx常用功能介绍 Nginx反向代理应用实例 反向代理(Reverse Proxy)方式是指通过代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并且从内部网络服 ...

  3. C&num;构造方法&lpar;函数&rpar; C&num;方法重载 C&num;字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍&lpar;二&rpar; SVN常用功能介绍&lpar;一&rpar; ASP&period;NET常用内置对象之——Server sql server——子查询 C&num;接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  4. 转 2 jmeter常用功能介绍-测试计划、线程组

    2 jmeter常用功能介绍-测试计划.线程组   1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添 ...

  5. SVN常用功能介绍&lpar;二&rpar;

    说明 上一章节主要描述了SVN的简介.安装搭建,和项目管理人员对SVN的常用操作. 这章主要讲解,SVN对应角色组员,在实际运用中的常用操作. 将SVN服务器项目导入到开发组员的本地电脑里 方式一: ...

  6. NSwag&period;AspNetCore常用功能介绍

    对于asp.net core 下的Swagger,之前一直用Swashbuckle的,因为官方推荐,再加上有老张的博客助力<从壹开始前后端分离[ .NET Core2.0/3.0 +Vue2.0 ...

  7. PowerDesigner常用功能介绍

    PowerDesigner常用功能:1:把SQL脚步导入PowerDesigner打开powerdesigner,选择File --> Reverse Engineer --> Datab ...

  8. Android开发自学笔记—1&period;1&lpar;番外&rpar;AndroidStudio常用功能介绍

    一.界面区介绍 1.项目组织结构区,用于浏览项目文件,默认Project以Android组织方式展示. 2.设计区,默认在打开布局文件时为设计模式,可直接拖动控件到界面上实现所见即所得,下方的Desi ...

  9. intelij idea常用功能介绍

    1.查看本地文件修改记录 保存本地修改记录: 可以将system下的LocalHistory保存,到另一个目录,需要的时候保存即可. 2.debbuger查看代码 1)优化设置 2)常用 3.条件断点 ...

随机推荐

  1. mysql 存储 emoji报错( Incorrect string value&colon; &&num;39&semi;&bsol;xF0&bsol;x9F&bsol;x98&bsol;x84&bsol;xF0&bsol;x9F)的解决方案

    1.报错原因: mysql utf-8 编码储存的是 2-3个的字节,而emoji则是4个字节. 2.解决办法: 修改mysql的配置文件,windows下的为my.ini(linux下的为my.cn ...

  2. 《ruby编程语言》笔记2 对象

    ruby是一门非常纯粹的面向对象的语言:所有值都是对象,而且没有基本类型(primitive type)和对象类型的区别,这一点不同于其他语言.在Ruby中,所有对象都继承一个Object类,而且共享 ...

  3. &lbrack;刷题&rsqb;算法竞赛入门经典&lpar;第2版&rpar; 5-4&sol;UVa10763 - Foreign Exchange

    题意:有若干交换生.若干学校,有人希望从A校到B校,有的想从B到C.C到A等等等等.如果有人想从A到B也刚好有人想从B到A,那么可以交换(不允许一对多.多对一).看作后如果有人找不到人交换,那么整个交 ...

  4. linux 命令&lpar;alias &comma; unalias &comma; install &comma;ar &comma; arch &comma;uname &rpar;

    https://linux.die.net/man/ http://man.linuxde.net/ user commands 1.alias [ˈālēəs]:别名 alias --help al ...

  5. 浅谈 DML、DDL、DCL的区别

    一.DML DML(data manipulation language)数据操纵语言: 就是我们最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些 ...

  6. MOOS学习笔记2——HelloWorld回调

    MOOS学习笔记2--HelloWorld回调 例程 #include "MOOS/libMOOS/Comms/MOOSAsyncCommClient.h" bool OnConn ...

  7. 在linux中安装protobuf编译器和运行时环境

    为了使用源码编译protobuf,需要下面的工具: autoconf, automake, libtool, make, g++, unzip 如果你使用ubuntu/debian,你可以使用如下方式 ...

  8. DataGuard----&gt&semi;备库参数db&lowbar;file&lowbar;name&lowbar;convert和log&lowbar;file&lowbar;name&lowbar;convert的作用

    一.参数说明 [1] db_file_name_convert db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐 ...

  9. 力扣(LeetCode)58&period; 最后一个单词的长度

    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例: 输入: &quo ...

  10. WCF开发框架形成之旅--个人图片信息的上传保存

    WCF开发框架形成之旅--个人图片信息的上传保存 http://www.cnblogs.com/wuhuacong/archive/2011/12/23/2299614.html 一般在业务系统里面, ...