//动态获取JSON数据
export const getH5StaticJson = (data) => {
return $getJson("/context.json", clearJson({ data }));
};
export const getPptJson = (data) => {
return $getJson("/ppt.json", clearJson({ data }));
};
打包后json文件在dist下,现在dist文件下的json变化网页是可以实时动态变化的,但是我想把json放在dist以外的路径下,而且两个json文件需要在不同的路径下,这个可以实现吗?
你本地实现不了,需要在服务器上的web中间件比如nginx上单独配置提供json的目录映射.
本地打包的东西肯定在dist目录或者dist的子目录下的
因此,要实现你的需求,有以下两种方式:
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`);
};
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单独部署一个服务, 供你使用,
可以直接打包后的路径访问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目录以外的文件。以下是几种可能的解决方法:
export const getH5StaticJson = (data) => {
return $getJson("/path/to/your/json/file.json", clearJson({ data }));
};
请注意,使用绝对路径可能会导致跨域问题,您可能需要在服务器端进行相应的配置。
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
。
请注意,在打包后的dist目录之外存储JSON文件可能会引起路径问题和部署问题。确保在将JSON文件存储在其他位置时,您的应用程序可以正确地访问和处理这些文件。
请根据您的具体需求和项目配置选择适合您的解决方案。