模块打包工具 :分析项目结构,找到JS模块以及其它的一些浏览器不能直接运行的语言(less等),并将其打包为合适的格式以供浏览器使用。javascript
主要有 6 部分:css
项目看成一个总体,经过给定的主文件,webpack从主文件开始找到项目全部依赖的文件,再用loaders处理这些文件,最后打包为一个浏览器可识别的javascript文件。html
$ sudo npm install -g webpack (全局安装)
$ npm init
在终端中使用命令能够自动建立这个package.json文件。输入这个命令后,终端会问你一系列诸如项目名称,项目描述,做者等信息,不过不用担忧,若是你不许备在npm中发布你的模块,这些问题的答案都不重要,回车默认便可
npm install --save-dev webpack
app文件夹和public文件夹,app文件夹用来存放原始数据和咱们将写的JavaScript模块,public文件夹用来存放以后供浏览器读取的文件(包括使用webpack打包生成的js文件以及一个index.html
文件)。接下来咱们再建立三个文件:java
index.html
--放在public文件夹中;Greeter.js
-- 放在app文件夹中;main.js
-- 放在app文件夹中;目的在于引入打包后的js文件(这里咱们先把以后打包后的js文件命名为bundle.js
)node
定义一个返回包含问候信息的html
元素的函数,并依据CommonJS规范导出这个函数为一个模块react
用以把Greeter
模块返回的节点插入页面webpack
定义一个配置文件,将全部与打包相关信息均放在配置文件中。新建webpack.config.js
文件,写入配置信息,主要涉及到的内容是入口文件路径和打包后文件的存放路径。web
有了这个配置以后,再打包文件,只需在终端里运行webpack(非全局安装需使用node_modules/.bin/webpack)
命令就能够
]正则表达式
能够经过在package.json
中对scripts
对象进行相关设置便可,设置方法以下:npm
![图片上传中...]
配置后执行npm start便可进行快速打包
(1)source maps
source maps 提供编译文件和源文件的对应。配置后,webpack
就能够在打包时为咱们生成source maps
,这为咱们提供了一种对应编译文件和源文件的方法,使得编译后的代码可读性更高,也更容易调试。在webpack
的配置文件中配置source maps
,须要配置 devtool
:
devtool选项 | 配置结果 |
---|---|
source-map | 在一个单独的文件中产生一个完整且功能彻底的文件。这个文件具备最好的source map,可是它会减慢打包速度; |
cheap-module-source-map | 在一个单独的文件中生成一个不带列映射的map,不带列映射提升了打包速度,可是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试形成不便; |
eval-source-map | 使用eval打包源文件模块,在同一个文件中生成干净的完整的source map。这个选项能够在不影响构建速度的前提下生成完整的sourcemap,可是对打包后输出的JS文件的执行具备性能和安全的隐患。在开发阶段这是一个很是好的选项,在生产阶段则必定不要启用这个选项; |
cheap-module-eval-source-map | 这是在打包文件时最快的生成source map的方法,生成的Source Map 会和打包后的JavaScript文件同行显示,没有列映射,和eval-source-map选项具备类似的缺点; |
对小到中型的项目,eval-source-map
是一个很好的选项,只应该开发阶段使用它,继续对上文新建的webpack.config.js
,进行以下配置:
(2)构建本地服务器
经过构建本地服务器,可让浏览器监听代码修改,自动刷新修改后的结果,改构建基于node.js,不过它是一个单独的组件,在webpack中进行配置以前须要单独安装它做为项目依赖。
npm install --save-dev webpack-dev-server
dev-server的配置项以下所示:
devserver的配置选项 | 功能描述 |
---|---|
contentBase | 默认webpack-dev-server会为根文件夹提供本地服务器,若是想为另一个目录下的文件提供本地服务器,应该在这里设置其所在目录(本例设置到“public"目录) |
port | 设置默认监听端口,若是省略,默认为”8080“ |
inline | 设置为true,当源文件改变时会自动刷新页面 |
historyApiFallback | 在开发单页应用时很是有用,它依赖于HTML5 history API,若是设置为true,全部的跳转将指向index.html |
配置dev-server 位置在webpack.config.js中,配置添加后以下图所示:
在配置好dev-server后还须要再package.json 的 scripts 中配置运行命令,以下图所示:
(3)Loaders
经过使用不一样的loader
,webpack
有能力调用外部的脚本或工具,实现对不一样格式的文件的处理,好比说分析转换scss为css,或者把下一代的JS文件(ES6,ES7)转换为现代浏览器兼容的JS文件,对React的开发而言,合适的Loaders能够把React的中用到的JSX文件转换为JS文件。
Loaders 须要单独安装,且配置在webpack.config.js 中的 modules 关键字下进行配置,配置项:
(4)Babel
babel 是一个js编译平台,能够编译ES6 、ES7,也可以使用JSX等语法
安装ES6以及JSX解析包
// npm一次性安装多个依赖模块,模块之间用空格隔开
npm install --save-dev babel-core babel-loader babel-preset-env babel-preset-react
在webpack中配置babel :
(5)插件(Plugins)
插件用于扩展webpack。
plugins和loaders的区别:
插件的使用须要用npm安装,而后在webpack配置中plugins字段下添加实例:
打包后的文件就会添加版权声明。
一些插件:
一、在安装时提示没有权限
解决:mac 电脑有权限限制,须要使用 sudo 进行安装