不少时候利用
React
、Vue
这类UI框架,为了快速开发项目,直接使用了官方推荐vue-cli
或者create-react-app
的脚手架。近段时间研究了不少webpack
打包文章和资料。本身动手搭建了一个Vue
项目脚手架。javascript
这个脚手架时基于webpack 4.36.1
,配置部分可能跟webpack3
版本有冲突,过程之中会提出。如今主要webpack
配置主要分打包环境和开发环境,分别对应webpack.dev.conf.js
和webpack.prod.conf.js
。后面会利用webpack-merge
把两部分公用的环境配置抽取到webpaack.base.conf.js
。其中dist
目录下是打包环境打包的chunk
包。css
脚手架Github
地址:https://github.com/Harhao/webpack
html
|-- build
| |-- webpack.base.conf.js
| |-- webpack.dev.conf.js (开发环境webpack配置文件)
| `-- webpack.prod.conf.js (打包环境webpack配置文件)
|-- config
| `-- index.js(webpack一些配置,例如webpack-dev-server)
|-- dist
| |-- framework_180dff6fd8b94a15.js(抽取的公共类库,vue,vue-router,vuex等)
| |-- index.html
| |-- main_180dff6fd8b94a15.js(打包的js文件)
| |-- main_fdef942b.css(打包的css文件)
| `-- vendors~main_180dff6fd8b94a15.js
|-- package.json(项目依赖及npm scripts定义)
|-- public
| `-- index.html(挂载文件)
`-- src (vue开发目录)
|-- App.vue
|-- main.js
|-- router
| `-- index.js
`-- views
|-- admin
| `-- index.vue
`-- login
`-- index.vue
复制代码
webpack.dev.conf.js
主要是提供开发单页应用时的打包配置文件,包含了热更新、vue
文件处理、打包后chunk
包注入等功能。开发环境配置文件没有添加过多的其余plugin
,保留了基本的一些开发必要的环境配置。下面会详细说明一些插件和配置信息的做用。vue
webpack
只提供了js
的模块打包功能。像其余.vue
,.jsx
,·.tsx
,scss
等后缀的文件,主要依赖于各种的loader
负责处理,而后进行打包操做。在平常利用vue
进行开发中,主要使用到单页文件模板开发(即.vue
后缀的模板),webpack
没法对该类文件处理。因此须要vue-loader
对该类文件进行转换。css的预编译scss
须要sass-loader
和node-sass
支持,scss
文件处理loader
执行顺序是从后面往前执行的,sass-loader
,css-loader
,style-loader
。java
对于处理es6
语法,须要babel-loader
转换编译,而babel-loader
须要@babel/core
,@babel/preset-env
。如今用的babel-loader
是8.0.6
版本,须要比较新版本的@babel/core
,@babel/preset-env
配合使用。在根目录下建立一个.babelrc
文件,内容以下:node
{
"presets": [
"@babel/preset-env"
]
}
复制代码
output
字段设置打包文件输出路径配置。filename
是输出文件命令,其中name
,hash
都是内置的变量名,还包括id
和chunkhash
打包内容哈希值。path
是输出路径指定,若是采起相对路径,是相对于当前运行的路径。这里采起的经过path.resolve
来配置路径。其中publicPath
字段是配置发布到线上资源的 URL 前缀,为string 类型,这里若是设置了vue-router
的base
,须要对此字段进行配置,否则会出现资源路径问题。react
经过webpack
打包文件,总不能手动把chunk
引入index.html
,这个社区提供了html-webpack-plugin
为咱们提供手动和自动注入打包文件路径,感谢开源社区提升生产力。devtool
设置开发环境生成.map
文件,方便咱们定位开发错误。到如今基本已经能够正常运行打包vue
开发了。不过每一次咱们修改开发内容,还得从新打包一次,多麻烦。webpack
平常开发过程当中,须要更新查看修改的内容,开源插件webpack-dev-server
为咱们提供了一个本地的express
服务,热更新修改的内容。提升咱们的效率。有关webpack-dev-server
的配置放在config/index.js
中,以下所示:ios
其中resolve
字段是配置配置 Webpack
怎样寻找模块所对应的文件。开发中常常遇到跨越狠多层级去import
所须要的模块,这里就可使用resolve.alias
配置别名定义一个目录,不用太长路径,相似于import api from '../../../api
这类出现。git
webpack
配置生产环境,须要对css
文件提取,js
文件压缩等;一些公用类库文件进行提取,相似于vue,vue-router,vuex,axios
等
webpack4
已经废弃了 extract-text-webpack-plugin
对css
文件的提取,建议使用mini-css-extract-plugin
。与webpack.dev.conf.js
不一样之处在于,由mini-css-extract-plugin
替代style-loader
。其中filename,
定义抽取的css
的名称。
clean-webpack-plugin
是清除每次打包chunk
包。每次npm run build
都会产生打包文件,因此使用clean-webpack-plugin
很方便清除多余的文件。clean-webpack-plugin
使用很简单。
uglifyjs-webpack-plugin
对打包的js
文件进行压缩。minimizer
中经过test
正则表达式匹配js
后缀对的文件进行压缩。
webpack3
以前使用CommonsChunkPlugin
进行分包。在webpack4
中正式提供了optimization.splitChunks
进行分包。在entry
中设置了入口文件framework:["vue","vue-router","vuex"]
须要分包的文件。在optimization.splitChunks
定义抽取的文件。
vue
的项目中,使用了vue-router
,vuex
依赖包,运行效果以下所示:
后面关于打包构建速度的优化,能够查看下一篇webpack4自定义脚手架优化。