webpack常用配置项配置文件介绍


Posted in Javascript onNovember 07, 2016

一.webpack基础

1.在项目中生成package.json:在项目根目录中输入npm init,根据提示输入相应信息。(也可以不生成package.json文件,但是package.json是很有用的,所有建议生成)

2.安装webpaack

a.在全局中安装webpack:npm install webpack -g

b.将webpack安装到项目并将webpack写入package.json的devDependencies中:进入项目根目录,然后在命令行中输入npm install webpack --save-dev。

3.打包模块

webpack <entry> <output>。

<entry>用于指定打包的文件, <output>用于指定打包后的文件。

webpack app/index.js

build/build.js表示将app文件夹中的index.js打包到build文件夹中的build.js中。

二.webpack配置文件常用配置项介绍

1.webpack有一个默认的配置文件webpack.config.js,这个文件需要手动的创建,位于项目根目录中。可以为一个项目设置多个配置文件,已达到不同的配置文件完成不同的功能。怎么设置后面介绍。

2.webpack的配置文件会暴露出一个对象,格式如下:

module.exports = {



//配置项


}

3.常用配置项将要说明

entry:打包的入口文件,一个字符串或者一个对象
output:配置打包的结果,一个对象
fileName:定义输出文件名,一个字符串
path:定义输出文件路径,一个字符串
module:定义对模块的处理逻辑,一个对象
loaders:定义一系列的加载器,一个数组
[
 {
test:正则表达式,用于匹配到的文件
loader/loaders:字符串或者数组,处理匹配到的文件。如果只需要用到一个模块加载器则使用

 loader:string,如果要使用多个模块加载器,则使用loaders:array

include:字符串或者数组,指包含的文件夹
exclude:字符串或者数组,指排除的文件夹
    }
]
resolve:影响对模块的解析,一个对象
extensions:自动补全识别后缀,是一个数组

plugins:定义插件,一个数组

4.entry详细说明

(1)当entry是一个字符串时,这个字符串表示需要打包的模块的路径,如果只有一个要打包的模块,可以使用这种形式

(2)当entry是一个对象

 a.是数组时,当需要将多个模块打包成一个模块,可以使用这个方式。如果这些模块之间不存在依赖,数组中值的顺序没有要求,如果存在依赖,则要将依赖性最高的模块放在最后面。

 例如:entry:["./app/one.js",".app/two.js"]

 b.是键值对形式的对象是,当需要分别打包成多个模块时,可以使用这种方式,例如;

entry:{



module1:"./app/one.js",




module2:["./app/two.js","./app/three.js"]



}

注:当entry是一个键值对形式的对象时,包名就是键名,output的filename不能是一个固定的值,因为每个包的名字不能一样

5.output详细说明

(1)output是一个对象

(2)output.filename:指定输出文件名,一个字符串。当输出一个文件,output.filename为一个确定的字符串
如:

output:{
filename:"build.js"
 }

当输出多个文件,output.filename不能为一个确定的字符串。为了让每个文件有一个唯一的名字,需要用到下面的变量

[name] is replaced by the name of the chunk.对应entry的键名

[hash] is replaced by the hash of the compilation.

[chunkhash] is replaced by the hash of the chunk.

如:

output:{





path:'./build/',






fialname:'[name].js'

}

(3)output.path:指定输出文件的路径,相对路径,一个字符串

(4)output中还有其他的一些值,不在这里说明,可以在webpack的官方网站中获得更多的详细信息

6.module.loaders详细说明

(1)module是一个对象,定义对模块的处理逻辑

(2)module.loaders是一个数组,定义一系列加载器,这个数组中的每一项都是一个对象

(3)module.loaders:[

{

test:正则,用于匹配要处理的文件

loader/loaders: 字符串或者数组, 如果只需要用到一个模块加载器 ,则使用loader:string,

如果要使用多个模块加载器,则使用loaders:array

include:字符串或者数组,指包含的文件夹

exclude:字符串或者数组,指排除的文件夹

}

]

(4)module除了可以配置loaders以外还能配置其他的值,在webpack的官网中获得更多的信息

7.resolve.extensions详细说明

(1)resolve.extensions并不是必须配置的,当不配置时,会使用默认值["", ".webpack.js", ".web.js", ".js"],当手动为resolve.extensions设置值,它的默认值会被覆盖

(2)如果你想要每个模块都能够按照它们自己扩展名正确的被解析,要在数组中添加一个空字符串。

(3)如果你想请求一个js文件但是在请求时不带扩展(如:require('somecode')),那么就需要将'.js'添加到数组中。其他文件一样

(4)resolve还有其他的配置项,在webpack的官网获得更多信息

8.补充

(1)当设置了配置文件后,在命令行中输入webpack就可按照默认配置文件中的配置项打包模块了。

(2)设置多个webpack配置文件。webpack默认的配置文件是webpack.config.js,当在命令行中输入webpack时默认找的是

webpack.config.js。通过在package.json的scripts中添加例如"start-html":"webpack --config webpack.html.config.js"在命令行中输入npm run start-html查找的就是webpack.html.config.js,通过这种方式可以实现不同的配置文件有不同的用处,这样就不用反复修改同一个配置文件

9.下面是一个简单的配置文件

module.exports = {
 entry:{
 one:"./app/one.js",
 two:"./app/two.js"
 },
 output:{
 path:"./build/",
 filename:"[name].js"
 },
 module:{
 loaders:[
 {
 test:/.*\.css$/,
 loaders:["style","css"],
 exclude:'./node_modules/'
 }
 ]
 },
 resolve:{
 extensions:['','.css','.js','jsx']
 }
};

三.webpack-dev-server

1.webpack-dev-server是一个轻量级的服务器,修改文件源码后,自动刷新页面将修改同步到页面上

2.安装webpack-dev-server:

全局安装:npm install webpack-dev-server -g

在项目中安装并将依赖写在package.json文件中:npm install webpack-dev-server --save-dev

3.使用命令webpack-dev-server --hot --inline完成自动刷新

4.默认的端口号是8080,如果需要8080端口被占用,就需要改端口,webpack-dev-server --port 3000(将端口号改为3000)

5.安装webpack-dev-server后就可以在命令行中输入webpack-dev-server开启服务,然后在浏览器地址栏中输入localhost:端口号,就可以在浏览器中打开项目根目录的index.html文件,如果项目根目录中没有index.html文件,就会在浏览器中列出项目根目录中的所有的文件夹。

6.第五条只是启动服务并不能自动刷新,要自动刷新需要用到webpack-dev-server --hot --inline

7.当使用webpack-dev-server --hot --inline命令时,在每次修改文件,是将文件打包保存在内存中并没有写在磁盘里(默认是根据webpack.config.js打包文件,通过--config xxxx.js修改),这种打包得到的文件和项目根目录中的index.html位于同一级(但是你看不到,因为它在内存中并没有在磁盘里)。使用webpack命令将打包后的文件保存在磁盘中

例如在index.html文件中引入通过webpack-dev-server --hot --inline打包的build.js

  <script src="build.js"></script>

在index.html文件中引入通过webpack命令打包的build.js

<script src="./build/build.js"></script>

8.每一次都敲一长串命令太麻烦,在项目根目录的package.json文件的scripts配置中添加配置,如"build":"webpack-dev-server --hot --inline",然后在命令行中输入 npm run build就能代替输入一长串命令(webpack-dev-server --hot --inline),运行webpack-dev-server --hot --inline默认是找 webpack.config.js,通过--config命令可以修改为另一个配置文件。例如:

webpack-dev-server --hot --inline --config

 'webpack.es6.config.js'

9.配置根目录

(1)当在命令行中输入webpack-dev-server --hot --inline,再在浏览器中输入localhost:端口号,浏览器会在项目的根目录中去查找内容,通过--content-base可以配置根目录。

如webpack-dev-server --hot --inline --content-base './build/',在build文件夹中去加载index.html,如果没有index.html文件,将会在浏览器中显示所有build目录下的文件和文件夹

四.例子

我一个设置了两个webpack的配置文件分别是webpack.config.js和webpack.react.config.js。package.json文件中scripts对象的内容如下:

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1",

"react": "webpack --config webpack.react.config.js",

"build": "webpack-dev-server --hot --inline --content-base ./build/",

"build-react": "webpack-dev-server --hot --inline --content-base ./react-build/ --config webpack.react.config.js"


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
&amp;lt;script defer&amp;gt; defer 是什么意思
May 10 Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
Aug 28 Javascript
JavaScript中的继承之类继承
May 01 Javascript
浅谈javascript alert和confirm的美化
Dec 15 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
JS中的phototype详解
Feb 04 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
详解React开发必不可少的eslint配置
Feb 05 Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
vscode调试node.js的实现方法
Mar 22 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 #Javascript
学习JavaScript图片预加载模块
Nov 07 #Javascript
pc加载更多功能和移动端下拉刷新加载数据
Nov 07 #Javascript
jquery html5 视频播放控制代码
Nov 06 #Javascript
js无提示关闭浏览器窗口的两种方法分析
Nov 06 #Javascript
详解Angular.js的$q.defer()服务异步处理
Nov 06 #Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 #Javascript
You might like
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
php获取地址栏信息的代码
2008/10/08 PHP
PHP5函数小全(分享)
2013/06/06 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
js实现放大镜特效
2017/05/18 Javascript
python简单文本处理的方法
2015/07/10 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python Gitlab Api 使用方法
2019/08/28 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
Python实现ATM系统
2020/02/17 Python
Python实现壁纸下载与轮换
2020/10/19 Python
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
十一酒店活动方案
2014/02/20 职场文书
小班上学期评语
2014/05/05 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
最感人的道歉情书
2015/05/12 职场文书
唐山大地震观后感
2015/06/05 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
《去年的树》教学反思
2016/02/18 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
html5调用摄像头截图功能
2022/01/18 Javascript
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL