开发语言都有编译和运行两个阶段,很多时候这个也会带来许多bug

如:一个项目在开发阶段测试没有问题,然上线发布后就会有这样那样的问题,譬如说图片的加载,静态数据(js,css,json)读取错误

一 、加载图片资源

接下来我们就使用vue的项目默认首页面的img来测试

1、使用data挂载url

我们把这个image的src改一下

改为挂载到data 如

保存刷新

图片报404

为啥会这丫呢?最开始的图片src是直接映射到图片的真实地址的,这个在编译期就会根据url把对应的资源打包进去;

而后面src使用data挂载,在编译时不会将资源打包进去,所运行期根据url寻找图片就会提示404了

2、使用静态目录加载img

解决方法就是直接将图片移入public目录(这个是CLI3的静态资源目录会默认打包进项目)

这样运行时就能找到图片了

二、加载json数据

1、使用axios 根据相对路径读取

同理使用axios加载本地json也会遇到同样问题

如在assets下面我们放一个json,然在组件读取



看这个运行时直接是404

2、使用copy-webpack-plugin 复制到指定目录

这个同上面图片一样可以移入到public目录下去,但还有一个方法可以解决,那就是copy-webpack-plugin这个在加入第三方libs特别有用

1)CLI2 拷贝资源方式

CLI2直接在webpack.prod.conf.jsplugins 下增加即可如


'use strict'
const CopyWebpackPlugin = require('copy-webpack-plugin') // other configure plugins: [
// other configure
// copy custom static assets
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
},
{ // add here
from: path.resolve(__dirname, '../src/assets/data/testgeojson.json'),
to: 'localData/data',
ignore: ['.*']
}
]) // other configure ]

1)CLI3 拷贝资源方式

而最新的CLI3要新增一个vue.config.js 同样添加copy-webpack-plugin


configureWebpack: {
plugins: [
new CopyWebpackPlugin(
[{
from: './src/assets/data/testgeojson.json',
to: 'localData/data',
ignore: ['.*']
}]
)]
}

同时修改组件中axios读取方法


loadJson(){
axios.get('localData/data/testgeojson.json').then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
}

再重启哈项目

OK了

其实新版的CLI要配置就得在vue.config.js中进行了,还有很多改动,目前我用到的配置如下

完整的 vue.config.js 配置


let path = require('path')
const CopyWebpackPlugin = require('copy-webpack-plugin') // 这里引入`这个CopyWebpackPlugin`插件
function resolve(dir) {
return path.join(__dirname, dir)
}
let isProduction = process.env.NODE_ENV === 'production'
module.exports = {
publicPath: `./`,
outputDir: `./cli3learn_dist`, // build 生产环境构建文件的目录
assetsDir: './statics',// 静态资源目录(很多时候打包后找不到css,这里指定后就可以解决这个问题)
indexPath: './index.html', // index.html路径
productionSourceMap: !isProduction,
chainWebpack: config => { // 别名指定
config.resolve.alias.set('@utils', resolve('src/utils/index.js'))
},
devServer: {
port:8089,
proxy: {
'/': {
target: 'https://www.benpaodehenji.com',
ws: false,
changeOrigin: true
}
}
},
// 使用这个插件 ,将src/assets/testgeojson.json拷贝到publi目录下
configureWebpack: {
plugins: [
new CopyWebpackPlugin(
[{
from: './src/assets/data/testgeojson.json',
to: 'localData/data',
ignore: ['.*']
}]
)]
}
}

ok 加载本地资源就这些了,纯属个人经验,有好方法的朋友不妨留言,不对的地方敬请指出

运行和编译时期资源加载的不同【vue】的更多相关文章

  1. Cocos Creator 资源加载流程剖析【一】——cc.loader与加载管线

    这系列文章会对Cocos Creator的资源加载和管理进行深入的剖析.主要包含以下内容: cc.loader与加载管线 Download部分 Load部分 额外流程(MD5 Pipe) 从编辑器到运 ...

  2. 细谈unity资源加载和卸载

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...

  3. 【Android开发学习笔记】【高级】【随笔】插件化——资源加载

    前言 上一节我们针对插件最基本的原理进行了一个简单的demo实现,但是由于插件的Context对象被宿主所接管,因此无法加载插件程序的资源.那么如何解决这个问题捏? 有人提出这样的方案:将apk中的资 ...

  4. Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关

    资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBu ...

  5. React Native:真机断点调试+跨域资源加载出错问题解决

    写在前面 闲来无事,折腾了一下React Native,相比之前,开发体验好了不少.但在真机断点调试那里遇到了跨域资源加载出错的问题,一番探索总算解决,目测是RN新版本调试服务的bug. 遇到类似问题 ...

  6. Cocos Creator 资源加载流程剖析【二】——Download部分

    Download流程的处理由Downloader这个pipe负责(downloader.js),Downloader提供了各种资源的"下载"方式--即如何获取文件内容,有从网络获取 ...

  7. 【死磕 Spring】----- IOC 之 Spring 统一资源加载策略

    原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Reso ...

  8. React Native 断点调试 跨域资源加载出错问题的原因分析

    写在前面 ————如果从头开始看还没解决,试试文章最后的绝招 闲来无事,折腾了一下React Native,相比之前,开发体验好了不少.但在真机断点调试那里遇到了跨域资源加载出错的问题,一番探索总算解 ...

  9. AssetBundle使用心得【资源加载】

    0.资源加载方式 静态资源 Asset下所有资源称为静态资源 Resources资源 Resources目录下,通过实例化得到的资源 AssetBundle资源 又称为增量更新资源 1.什么是Asse ...

  10. libgdx学习记录16——资源加载器AssetManager

    AssetManager用于对游戏中的资源进行加载.当游戏中资源(图片.背景音乐等)较大时,加载时会需要较长时间,可能会阻塞渲染线程,使用AssetManager可以解决此类问题. 主要优点: 1. ...

随机推荐

  1. Spring--AOP通知获取数据

    AOP通知获取数据 获取参数 用before进行举例: 用around进行举例: 需要注意的是,Around的话,还可以处理一些之前发生异常的数据,直接在这里进行修改也是支持的: 获取返回值 环绕已经 ...

  2. J - Straight Master Gym - 101775J 差分

    题意:纸牌顺子:连续的3张或连续的4张或连续的5张为顺子.手中的牌共有n个数字,每个数字是a[i]个,能不能把手中所有的牌都是属于顺子. 1 ≤ T ≤ 100. 1 ≤ N ≤ 2 × 105. 0 ...

  3. Go语言:利用 TDD 驱动开发测试 学习结构体、方法和接口

    环境安装: (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4 上一篇相关随笔: Go语言:利用 TDD 测试驱动开发帮 ...

  4. [C++STL教程]4.map超强的容器,它终于来了!零基础都能理解的入门教程

    之前我们介绍过vector, queue, stack,他们都有一个共同的特点,就是都可以用线性表来模拟.今天我们来学习一个全新且高封装性的容器:map. 作者:Eriktse 简介:19岁,211计 ...

  5. IconJar - Mac 上的一款多功能图标素材管理工具

    IconJar 是一个多功能的图标管理工具,由世界各地的设计师和开发人员使用.在一个应用程序中搜索.组织.预览和检索图标,而不是创建大量的文件夹来存储你的收藏.这款应用针对黑暗模式进行了优化,并支持S ...

  6. MySQL约束条件介绍

    无符号.零填充 unsigned # 因为正负值符号会占用一个比特位,使用此约束条件可以去掉数字类型里面的正负值符号,之后相同数字类型会支持的正数范围会更大 id int unsigned zerof ...

  7. [网络]内网IP的判别与分类

    1 内网IP划分 内网IP地址分为A类.B类和C类,其地址范围如下: A类地址: 10.0.0.0 - 10.255.255.255 B类地址: 172.16.0.0 - 172.31.255.255 ...

  8. [Linux]Linux中安装软件的方式?

    近日处理安全漏洞时,出现了这样一个问题: 判断某软件组件是通过何种方式安装的. 知道是何种方式安装,才方便做进一步的解决(升级/配置/卸载等操作) 1 解压即用 例如: sublime_text.py ...

  9. 升级:Logical Upgrade升级MySQL5.6.26

    升级需谨慎,事前先备份 MySQL升级的实质是对数据字典的升级,数据字典有:sys.mysql.information_schema.performance_schema . MySQL升级的两种方式 ...

  10. Smt贴片换料口诀及注意事项

    Smt贴片换料口诀及注意事项 一.Smt贴片送料口诀 1.若飞达没料,机器报警,操作员根据机器的提示消警 2.取出缺失飞达料,把用完的料盘取下 3.把备好的物料与换下来的料盘核对,确认无误装飞达 4. ...