之前我们将服务端与客户端代码都 ready 了,现在开始编写 webpack.config
。 我们对于 webpack 的配置包括单独的 webpack.config.js
和 服务端的 server.js
。 如果不依赖于 express
,我们大可以使用 webpack dev server
来跑起来我们的前端项目。但现在我们需要在 express
的托管下来跑。
大致思路就是, 使用 express
来托管我们的静态资源,包括 html image css js
。 使用 http-proxy
模块来代理前端过来的 GET/POST 请求。dev环境使用 middleware 来实现 webpack的部分功能。
webpack将所有文件视为js代码
对于 webpack 的配置,我们要有一个清晰的思路: webpack 主要用于 多文件 的打包,可同时配置 入口文件 和 打包文件 ,对于文件的编译(例如es6 -> es5,读取svg图片)使用loader,对于同一种类型的文件可调用多个loader进行处理(类似gulp的pipe)对于文件的压缩,生成新文件等有关于 文件的操作 使用插件的形式。
搞清楚了这些,我们来理一下我们需要webpack帮我们完成的工作:
import
来找出其他模板的代码,最终生成出一份 最终的代码,这里面包含了所有的逻辑代码 (可能很大)。import *.css/less/scss
import *.png/jpg/gif
这种代码,所以 webpack 需要对这些后缀的文件进行处理。html
文件。以上就是我们需要webpack为我们做的工作。下面我们根据我们这几个需求来编写 webpack 的配置文件。
1 | const webpack = require('webpack'); |
我们在刚在的中,声明了webpack 工作的环境(context), 默认为 process.cwd()
, 定义了打包的入口(entry), entry可以携带参数,因我们使用了 webpack-hot-middleware
, 所以我们对入口文件加了这个参数来让 webpack的server 实时监控文件的改变来rebuild app.js。 同时我们对库文件进行了拆分, 拆成了两个文件 vendor1 和 vendor2 来减少打包后的文件体积。
我们同时定义了输出文件的属性,输出的js文件名包含5位hash码,定义了文件的输出路径(path)和 资源引用路径(publicpath), publicpath 用于webpack生成html使用。
我们还定义了webpack在读取、解析 js的时候的解析规则(resolve), 添加了能够省略的 import
文件的拓展名的数组(extension)。
1 | module: { |
这里的配置很好理解,只是通过正则匹配文件然后走特定的loader解析的过程。 这里要注意几点:
include
参数来指定需要处理的文件的路径1 | plugins: [ |
此处我们定义了 webpack 的插件的属性。