小记 vue 打包(build)需要注意的一些事
记录 vue 项目打包的一些事情
首先声明项目都是由 vue-cli 生成;
vue 项目从 dev 切换到 prod 时有很多地方需要注意;
首先是大家最需要注意的 ajax 切换环节
以前一开始用 Vue 的时候我是在 build 之后,手动修改 ajax 的请求前缀
比如现在我使用的 axios,axios.defaults.baseURL = 'api'
但是打包的时候一般都要改动 url,直到我后来知道了
process.env这个对象,
使用他可以获取当前的环境(后续还会提到,如何修改这个对象)
之后就可以轻松的修改 ajax 的基础路径了:axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'api' : ''
使用该方法能够无需在打包时修改路径,更好地配合 webpack 的 proxyTable;
与 1 类似的
Vue.config.devtools同样地使用process来解决这个问题,Vue.config.devtools = process.env.NODE_ENV === 'development'
该属性是是否能够打开 vue 的 devTools;
某个小有名气的网站,vue 上线的时候,还是 dev 环境,大家引以为戒吧
sources里的
webpack://大家在运行程序的时候可以打开 chrome 的 sources 点击
webpack://可以发现这个对象里,有所有在运行的组件,资源的源码;
这个是为了在 debug 的时候调试,然而在 build 之后这个仍然会存在与 sources 中留下很大的隐患;而解决这个的方法就是在
/config/index.js文件下 build 对象中的productionSourceMap改为:productionSourceMap:false
在 build 之前需要检查一下该属性;
build 之后需要相对路径的引用:
也许大家都知道了,在一般项目 build 之后都会生成一个 index.htm 文件和 一个 static 文件夹,而 static 这个文件夹需要被放置在根目录下,
index.html 会在决定路径下引用该文件
如果需要添加模块的话,只需要在/config/index.js文件下的 build 对象下,修改assetsSubDirectory属性为:assetsSubDirectory: 'static/[模块名]'
很多人引用图片, css 时也都是在 static 文件夹里面引用的,所以绝对引用也没有太多的问题;
回到正题,如果图片,css 都是在 assets文件里面, build 之后的文件需要相对路径的引用,这个情况也是比较多的:
assetsSubDirectory这个属性可以像我上面说的那样,再修改assetsPublicPath为'./'如果还有终极的引用需求,比如我碰到的这个:
index.html 放置在根目录的模块文件夹下, static 需要放置在根目录的公共static下的模块文件夹下,
这里需要改的话会比较麻烦,不过我估计没什么人会和我一样碰到这样的要求,
我就简单讲下,先是修改/build/webpack.base.conf.js里图片的引用方式,再修改/build/utils.js里的assetsPath函数,使其碰到图片的引用时,添加对应的路径即可;
特别说明:
打包后,如果你需要使用相对路径来引用,js,css,图片等资源,而且图片是放在assets中的,那么你一定会碰到图片引用错误的情况,
解决该情况也比较容易:
在build/utils.js中大概第47行的样子,修改ExtractTextPlugin.extract为:return ExtractTextPlugin.extract({
use: loaders,
publicPath: '../../', // 仅添加该行即可
fallback: 'vue-style-loader'
})
添加自定义的全局变量:
在
/build/webpack.dev.conf.js文件下找到plugins里的DefinePlugin如下,添加测试:new webpack.DefinePlugin({
'process.env': require('../config/dev.env'),
'myTest':true
})
重新启动项目,在
main.js里面打印该属性:console.log(myTest) // true
可以发现 console 里输出了该属性的值
true,同样地在/build/webpack.prod.conf.js文件下也可以添加全局变量,
可以通过改方法来替换本文中 1 里的功能,可以直接改变全局变量,而不是用当前环境来判断;
如果需要压缩vendor文件,可以看我另一篇博客 https://www.cnblogs.com/Grewer/p/9033530.html
基本就这样了,可能还有不完善的地方,如果我发现后续还会再加上;
完
小记 vue 打包(build)需要注意的一些事的更多相关文章
- Vue+elementUI build打包部署后字体图标丢失问题
错误描述:Vue+elementUI build打包部署后字体图标丢失,控制台显示文件element-icons.woff和element-icons.ttf文件404 错误展现: 控制台报错截图 ...
- Vue打包后出现一些map文件
Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1,运行 cnpm run build 开始 ...
- cordova+vue打包webapp
使用cordova+vue打包webapp,可以快速给网页套上一个android和ios壳子,完成一个app的开发. 1. 环境准备. (1)node.js 下载地址: https://nodejs ...
- Vue打包优化之分析工具webpack-bundle-analyzer
// 1. 安装 cnpm install webpack-bundle-analyzer --save-dev // 2. 在/build/webpack.prod.conf.js文件中引入 con ...
- vue打包以及在Apache环境下的配置
vue打包,我们都清楚,实在记不住命令的可以去package.json中看: npm run build 打包后会生成dist文件夹,将dist文件夹下的所有文件复制到Apache下的www的文件夹下 ...
- vue打包静态资源路径不正确的解决办法
vue打包静态资源路径不正确的解决办法 vue项目完成打包上线的时候会碰到静态资源找不到的问题,常见的有两个 1.js,css路径不对 解决办法:打开config/index.js,将其中的asset ...
- vue打包后运行在本地/非服务器端环境的访问路径
vue打包前的配置: 项目目录下--> config文件夹---> index.js: build: { assetsPublickPath: './', // 设置成相对路径 ...
- vue打包后出现一些map文件的解决方法
Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1.运行 cnpm run build 开始 ...
- Vue打包后页面出现cannot get
学习Vue有大半个月了,然而遇到了不少坑,完全没有高手们那么容易,中间有不少值得记录下的东东,回头好好理理.先理下今天的: Vue打包命令简单啊,直接在命令行输入:npm run build 然而没一 ...
随机推荐
- jsp页面根据json数据动态生成table
根据需求由于不同的表要在同一个jsp展示,点击某个表名便显示某张表内容,对于java后台传给jsp页面的json形式的数据是怎么动态生成table的呢? 找了好久,终于找到某位前辈的答案,在此表示衷心 ...
- topshelf生成Windows服务
一. 概述 Visual C# 工程中选取 Windows 服务(Windows Service)选项,可以创建Windows服务程序,这种开发方式对于开发来说不方便调试,今天介绍另外一种生成Win ...
- Ubuntu 16.04下操作iptables的技巧(解决Failed to start iptables.service: Unit iptables.service not found.或者/etc/init.d/iptables: 没有那个文件或目录)
/etc/init.d/iptables网上的解法应该都是基于CentOS 6去实践,而在CentOS 7中又被firewalld给取代,所以操作上的写法基本会改变,但是底层iptables则不会改变 ...
- rsyslogd系统日志服务总结
简单介绍 syslog系统日志服务协议,标准出来的比较晚 用于记录系统日志或者用户程序产生的日志 采用C/S架构,本地可以通过socket和syslogd守护进程通讯,远程通过TCP/UDP协议通信, ...
- js 计算获取鼠标相对某个点的移动旋转角度
// 旋转角度 function getAngle(cen, first, second) { // cen : 中心点 [0,0] // first : 开始点 [1,3] // second : ...
- java压缩与解压文件
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...
- Socket编程中,阻塞与非阻塞的区别
阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到 ...
- Cardboard虚拟现实开发初步(二)
Google Cardboard 虚拟现实眼镜开发初步(二) Cardboard SDK for Unity的使用 上一篇文章作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,本篇就会带领大家去看一 ...
- Linux系统调用过程分析
參考: <Linux内核设计与实现> 0 摘要 linux的系统调用过程: 层次例如以下: 用户程序------>C库(即API):INT 0x80 ----->system_ ...
- 华为OJ2288-合唱队(最长递增子序列)
一.题目描述 描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, ...