使用webpack心得
2016-08-25 本文已影响826人
孤独花园
由于vue官网教程提示使用webpack来开发vue,所以就入坑了。官网代码如下:
# 全局安装 vue-cli
$ npm install -g vue-cli
# 创建一个基于 "webpack" 模板的新项目
$ vue init webpack my-project
# 安装依赖,走你
$ cd my-project
$ npm install
$ npm run dev
官网
在输入命令 vue init webpack my-project
来创建项目时,跳出了很多选项,第一次都选yes,后来都没用上,所以第二次都选了no,以后要用的话再装吧,省得很臃肿。
刚开始正式用的时候在本地加载都有点久,打开network一看足足有1.8M。
不明原因,于是请教老司机,把devtool关了才变几百k,缓解了一点这情况
代码如下:
// build/webpack.dev.conf.js下
// devtool: '#eval-source-map', 把这个选项改成false
devtool: false,
690KB
现在是690KB
后来又参考了这两篇文章 webpack常用配置总结,webpack 看我就够了(二),把devtool又改了:
devtool:'#eval'
711KB
看来还是devtool关了最快,但是关了之后调试就很麻烦了,有错但不知道是哪里有错
刚开始使用vue+webpack时不是引用外部的前端库如bootrasp,jquery,而我的做法是这样的:
使用cdn引用这样做的话也能达到效果,而且能减少编译时间,感觉还不错。但是毕竟是引用别人服务器的,那么引用本地的jquery呢?
后来开始参考别人的代码,找到答案:
传送门
代码如下:
// 修改的是build/webpack.config.js
// 在开头引入webpack,后面的plugins那里需要
var webpack = require('webpack')
// resolve
module.exports = {
// 其他代码...
resolve: {
// require时省略的扩展名,如:require('module') 不需要module.js
extensions: ['', '.js', '.vue'],
fallback: [path.join(__dirname, '../node_modules')],
// 别名,可以直接使用别名来代表设定的路径以及其他
alias: {
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets'),
'components': path.resolve(__dirname, '../src/components'),
// webpack 使用 jQuery,如果是自行下载的
// 'jquery': path.resolve(__dirname, '../src/assets/libs/jquery/jquery.min'),
// 如果使用NPM安装的jQuery
'jquery': 'jquery'
}
},
// 增加一个plugins
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
})
],
// 其他代码...
}
接下来比如我要引入Bootstrap,我们在vue的入口js文件src/main.js开头加入
// 使用Bootstrap
import '../static/bootsrap/bootstrap.min.css'
import '../static/bootstrap/bootstrap.min.js'
这样bootrasp就被正确构建并且引用。
再比如使用chart,只需要在需要的地方import进来:
// 使用chart.js
import chart from 'chart.js'
再比如我们要使用highcharts,可以直接在export default{}中引入并使用:
var Highcharts = require('highcharts')
this.chart = new Highcharts.Chart(optsData)
在简书的一篇文章中get到很多减少打包文件的大小的技能 -> 彻底解决 webpack 打包文件体积过大
效果如下:
疑惑:按照文章里面的提示,把
HotModuleReplacementPlugin, NoErrorsPlugin
这两个插件去除,反而运行不了。不去除才是可以的。不过还是有很大的收获的,主要是大小小了不少。