前端11_2笔记——webpack
安装webpack配置
首先在新建的项目中npm init新建一个npm项目,然后安装webpack相关的组件
1 | npm i webpack vue vue-loader |
同时还需要安装:
1 | npm i css-loader vue-template-compiler |
新建一个app.vue并写入一些组件,新建一个webpack.config.js进行一些设置。
新建一个index.js进行入口文件的设置
1 | import Vue from 'vue' |
webpack只支持js文件并且只支持ES5的语法,所以需要进行一些处理:
1 | module:{ |
并且vue-loader在15.*之后的版本都是 vue-loader的使用都是需要伴生 VueLoaderPlugin的,具体内容可详见https://vue-loader.vuejs.org/guide/#vue-cli
所以进行以以下处理:
1 | // webpack.config.js |
之后运行npm run dev就能够看见新建了一个dist的文件,并且底下有一个bundle.js文件,webpack所作的工作就是把不同的的静态资源文件打包成一个.js文件,然后在html中去引入这个文件实现。因为在http中将零散的文件打包成一个减少http请求的次数。
1.处理.vue文件
在webpack.config.js文件中,利用module来设置rules:
1 | { |
2.处理CSS文件
利用css-loader来处理CSS文件,但是在实际运用的过程当中会有不同的处理方式,所以这时候需要换一种写法:
1 |
最终,CSS代码会写入到js文件中去,并且最终会引入到html当中去。
3.图片的处理方式
这里loader使用一个对象去写,因为实际上一个对象是可以进行配置的,利用options可以对其进行配置:
这里,url-loader可以将图片转换为Base-64代码直接插入到js中去,不用生成新的图片,这对于我们几KB的文件是很有用的,就不用生成http请求。url-loader实际上封装了file-loader,其就是将图片进行读取并进行一些简单的操作之后重新存储。limit设置了转换图片的大小。
1 | loader:'url-loader', |
配置之后需要安装相应的模块:
1 | npm i style-loader url-loader file-loader |
4.CSS
CSS预处理器就是用模块化的思想去写CSS代码。比如利用.styl
1 | { |
并安装stylus和stylus-loader
配置webpack-dev-server
首先安装这个包
1 | npm i webpack-dev-server |
在package.json中的scripts加入”dev”:”webpack-dev-server –config webpack.config.js”
然后在webpack.config.js中全局加入target:’web’,同时需要判断正式环境和开发环境:
安装cross-env可以保证我们在不同的平台执行同一个脚本,在package.json中的build下加入
1 | "build": "cross-env NODE_ENV=production webpack --config webpack.config.js", |
当启动脚本的时候设置的环境变量全部都是设置在process.env里面的,可以在process.env中设置多个变量名并读取到这些变量。
然后设置当环境为production的时候,进行对server的配置:
1 | if(isDev){ |
现在需要一个html页面来显示我们的内容:
首先安装一个插件:
1 | npm i html-webpack-plugin |
之后在最前面引入这个插件:
1 | const HTMLPlugin = require('html-webpack-plugin') |
并进行调用:
1 | plugins: [ |
热加载
在config.devServer中设置
1 | hot:true, |
然后设置下面的两个选项:
1 | config.plugins.push( |
并在前面引入webpack:
1 | const webpack = require('webpack') |
并且设置devtool
1 | //这是帮助我们调试代码 |
最终,在webpack.config.js中的代码如下所示:
1 | ‘const path = require('path') |
CSS分离:
之前的CSS代码在打包之后都是在同一个.js文件中,并且里面内容很多不容易找到,这时候需要利用相关的插件对CSS进行分离。
首先先npm i extract-text-webpack-plugin
然后在webpack.config.js文件中添加const ExtractPlugin = require(‘extract-text-webpack-plugin’),这个就是将我们的非js代码单独打包成一个文件,因为这个文件有可能会作为缓存和利用js将一些样式写入页面中。
1 | const path = require('path') |