vue打包后json文件可以放在其他路径文件夹下吗

用axios实现json文件的动态读取
//动态获取JSON数据
export const getH5StaticJson = (data) => {
  return $getJson("/context.json", clearJson({ data }));
};
export const getPptJson = (data) => {
  return $getJson("/ppt.json", clearJson({ data }));
};

img

打包后json文件在dist下,现在dist文件下的json变化网页是可以实时动态变化的,但是我想把json放在dist以外的路径下,而且两个json文件需要在不同的路径下,这个可以实现吗?

你本地实现不了,需要在服务器上的web中间件比如nginx上单独配置提供json的目录映射.
本地打包的东西肯定在dist目录或者dist的子目录下的

TechWhizKid参考GPT回答:

  • 在浏览器环境中(比如Vue.js的运行环境),由于安全限制,你只能请求自己的服务器提供的资源,或者通过CORS(Cross-Origin Resource Sharing)策略访问其他服务器的资源。换句话说,你无法直接从本地文件系统(除了你的项目所在位置)读取文件。

因此,要实现你的需求,有以下两种方式:

  1. 创建一个简单的后端服务,这个后端服务可以读取本地文件系统的文件,然后提供一个HTTP接口供你的Vue.js应用调用。你可以使用Express.js(Node.js的一个框架)来实现这个后端服务。以下是一个简单的Express.js服务的例子,它提供一个API接口用于读取本地文件系统的文件:
const express = require('express');
const fs = require('fs');
const app = express();
const port = 3000;

app.get('/get-json/:filename', (req, res) => {
  const { filename } = req.params;
  fs.readFile(`/path/to/your/files/${filename}`, 'utf8' , (err, data) => {
    if (err) {
      console.error(err);
      return res.status(500).send('An error occurred');
    }
    return res.send(JSON.parse(data));
  });
});

app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

然后在Vue.js中使用axios调用这个接口:

export const getH5StaticJson = (data) => {
  return axios.get(`http://localhost:3000/get-json/context.json`);
};
export const getPptJson = (data) => {
  return axios.get(`http://localhost:3000/get-json/ppt.json`);
};
  1. 将json文件移动到Vue项目的public文件夹。这是最简单的方法,只需要将json文件放到public文件夹,然后使用axios获取。这样做的话,只要你的Vue.js应用在运行,就可以通过HTTP请求访问这些文件。例如:
export const getH5StaticJson = (data) => {
  return axios.get(`/context.json`);
};
export const getPptJson = (data) => {
  return axios.get(`/ppt.json`);
};

总结起来,你不能直接从Vue.js应用以外的位置获取json文件,你需要通过HTTP请求来获取这些文件。你可以选择创建一个后端服务,或者将文件放在你的项目的public文件夹。

方案一
更改代码改成通过http请求获取json文件, 连接后端提供,
方案二 ,
更改代码改成通过http请求获取json文件, 部署前端文件的时候,通过nginx或者toncat等工具,将json单独部署一个服务, 供你使用,

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7600779
  • 这篇博客你也可以参考下:vue 加载静态json文件打包后更换json内容不起作用
  • 除此之外, 这篇博客: 搭建Vue项目,并简单的使用axios获得json文件中的数据中的 搭建一个vue项目 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 安装node.js https://nodejs.org/zh-cn/download/ 下载最新版(长期支持)10.16.10
    2. 检查安装
      在这里插入图片描述
    3. 安装npm镜像:在cmd上输入命令:npm install -g cnpm –registry=https://registry.npm.taobao.org
      .
    4. 检查npm镜像是否安装成功
      输入命令:cnpm -v
    5. 安装好后需要搭建项目环境,全局安装vue-cli 在cmd上输入:npm install --global vue-cli
    6. 进入一个文件夹,在那里创建一个新项目 输入命令:vue init webpack test,其中,test为你想创建的文件夹的名字。
    7. 跟着指令 按空格一步步走,根据自己的选择选择y/n,一般情况下,除vue-router之外都不需要。
    8. 创建完成后 进入这个项目文件夹 cd test ,继续安装依赖 cnpm -i
    9. 启动项目:npm run dev

可以直接打包后的路径访问json路径

实现不了

存放在项目的public文件目录下即可

Vue打包后的JSON文件可以放在其他路径文件夹下。您可以通过配置webpack来指定输出路径。
在Vue项目的根目录下找到vue.config.js文件(如果没有则新建一个),然后在该文件中添加以下代码:

module.exports = {
  outputDir: 'dist', // 打包输出目录,默认为dist
  assetsDir: 'static', // 静态资源目录,默认为static
  indexPath: 'index.html', // 打包后的HTML文件,默认为index.html
  publicPath: './', // 静态资源引用路径,默认为'/',如果放在其他路径下,请修改为相应的路径
}

在上述代码中,outputDir表示打包输出目录,您可以将其修改为您想要的路径,比如dist/myfolder。
然后,在打包命令时,执行npm run build,Vue会将打包后的JSON文件放在指定的路径下。
请注意,如果您修改了输出路径,请确保在服务器配置中正确指向该路径,以便正确加载静态资源。

axios读取外部json文件

你的json打包之前是怎么放的

可以将json文件放在dist以外的路径下,比如,将你的json文件放在http服务器上,然后在代码中使用使用http://xxx/josn/file1.json的形式访问。或者在打包的时候,看下能否在webpack配置文件中指定不同的输出路径来实现。比如可以在webpack配置文件中使用output.libraryTarget和output.library来指定输出的json文件的路径和名称。

引用chatgpt内容作答:
在Vue中,默认情况下,只能直接访问项目根目录(通常是src目录)以内的文件。这是由Webpack打包工具的配置所决定的。

如果你想访问项目根目录以外的文件,可以考虑以下几种方式:

1、将需要访问的文件放置在public文件夹下:你已经在public文件夹下放置了JSON文件,这样它们会被直接复制到打包后的输出目录(通常是dist目录)中。在运行时,可以通过相对于网站根目录的路径来访问这些文件。例如,如果你的JSON文件位于test目录下,可以使用/test/context.json和/test/ppt.json路径来访问这些文件。

2、使用绝对路径:如果你想从Vue应用中访问项目根目录以外的文件,可以使用绝对路径。你可以使用完整的文件系统路径来访问这些文件。例如,/path/to/your/json/context.json和/path/to/your/json/ppt.json。请注意,这种方法可能会导致你的应用在不同环境中无法正常工作,因为文件系统路径在不同计算机上可能会有所不同。

3、使用服务器端接口:如果你想从Vue应用中获取位于项目根目录以外的文件,并希望具有更好的灵活性和跨环境兼容性,你可以考虑创建一个服务器端接口。在服务器端接口中,你可以使用服务器端的文件系统路径来读取文件内容,并将其作为API的响应返回给Vue应用。然后,Vue应用可以通过调用这个接口来获取文件内容。

无论你选择哪种方法,都需要注意安全性和路径的可维护性。确保对访问的文件进行适当的权限控制,并考虑将路径配置为可配置的选项,以便在不同环境中进行设置。

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您的描述,您想要在Vue项目中通过axios动态读取位于项目根目录以外的文件,包括打包后的dist目录以外的文件。以下是几种可能的解决方法:

  1. 使用绝对路径:您可以使用绝对路径来获取位于项目根目录以外的文件。您可以通过指定完整的文件路径来访问位于test目录或其他任何位置的JSON文件。例如:
export const getH5StaticJson = (data) => {
  return $getJson("/path/to/your/json/file.json", clearJson({ data }));
};

请注意,使用绝对路径可能会导致跨域问题,您可能需要在服务器端进行相应的配置。

  1. 配置代理服务器:如果您在开发阶段希望通过axios获取位于项目根目录以外的文件,您可以在Vue项目的配置中设置代理服务器。通过代理服务器,您可以将请求转发到指定路径的JSON文件。您可以在项目的vue.config.js文件中进行配置,示例如下:
module.exports = {
  // ...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8000', // 代理服务器地址
        pathRewrite: {
          '^/api': '/path/to/your/json/file.json' // 实际请求的路径
        }
      }
    }
  }
};

在上述示例中,通过访问/api路径,代理服务器将请求转发到http://localhost:8000/path/to/your/json/file.json

  1. 服务器端提供API:如果您的JSON文件位于Vue项目以外的目录中,您可以在服务器端创建一个API来提供JSON文件的内容。通过使用服务器端的路由和文件系统操作,您可以从服务器端返回JSON数据。在Vue项目中使用axios来请求该API并获取数据。

请注意,在打包后的dist目录之外存储JSON文件可能会引起路径问题和部署问题。确保在将JSON文件存储在其他位置时,您的应用程序可以正确地访问和处理这些文件。

请根据您的具体需求和项目配置选择适合您的解决方案。