【发布时间】:2018-12-22 07:44:57
【问题描述】:
当我使用npm run dev 加载我的网站进行开发时,没有问题。但是,当我使用 npm run prod 构建我的网站进行生产构建时,来自我的 .json 的数据不会出现在网页上,也不会显示在我输出的 dist 文件夹中。
我正在使用 Webpack 4。我认为下面的代码正在更改我对 .json 文件的引用的路径,并将 .json 文件输出到我的 dist/assets 文件夹,类似于 .png、.woff 等。文件。不幸的是,事实并非如此。 (不知道为什么)。
module.exports = {
entry: "./src/index.js",
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module: {
rules: [
...
{
test: /\.(png|jpg|gif|eot|ttf|woff|woff2|json)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: './assets'
}
},
...
]
},
...
在下面的代码中,我使用 XMLHttpRequest() 来获取两个.json 文件的内容。我引用的两个 .json 文件在开发服务器中加载,但在我运行生产构建时不加载。下面的代码在一个名为PeriodicTable.vue 的.vue 组件中(我不认为Vue 是这里的问题)。
mounted: function() {
...
var xmlhttp = new XMLHttpRequest();
var self = this;
var url = "/src/assets/data/main.json";
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
if(this.readyState == 4 && this.status == 200) {
self.elements = JSON.parse(xmlhttp.responseText).elements;
}
}
xmlhttp.send();
var xmlhttp2 = new XMLHttpRequest();
var self = this;
var url2 = "/src/assets/data/groupPeriodLabels.json";
xmlhttp2.open("GET", url2, true);
xmlhttp2.onreadystatechange = function() {
if(this.readyState == 4 && this.status == 200) {
self.periodLabels = JSON.parse(xmlhttp2.responseText).periodLabels;
self.groupLabels = JSON.parse(xmlhttp2.responseText).groupLabels;
}
}
xmlhttp2.send();
}
...
您可以在下面的照片中查看我的文件目录,或者在托管此代码的repository 上查看所有代码。
XMLHttpRequest() 文件似乎没有找到生产版本中 .json 文件的正确路径。是否与import、require 或url() 有关?任何帮助将不胜感激。
编辑:我有一个 index.js,其中包括以下内容:
// index.js
import './css/main.scss';
import 'material-icons/iconfont/material-icons.css';
// VueJS
import Vue from 'vue';
window.Vue = Vue;
// VueSax (UI elements for Vue)
import Vuesax from 'vuesax'
import 'vuesax/dist/vuesax.css' // Gather VueSax styles
Vue.use(Vuesax, {
theme: {
colors: {
}
}
})
// Feather Icons (Icon library for Vue)
import VueFeatherIcon from 'vue-feather-icon';
Vue.use(VueFeatherIcon);
import Navigation from './components/Navigation.vue';
import PeriodicTable from './components/PeriodicTable.vue';
import Footer from './components/Footer.vue';
new Vue({
render: k => k(Navigation)
}).$mount('#navigation-el')
new Vue({
render: h => h(PeriodicTable)
}).$mount('#grid-el')
new Vue({
render: m => m(Footer)
}).$mount('#footer-el')
【问题讨论】:
-
您的
config/index.js中有什么内容? -
@dziraf 现在在问题中进行了编辑。我很抱歉最初没有包含它。
-
不,不是这个 - 提供来自
config文件夹的包含构建路径的文件夹 -
@dziraf 嗯。我没有配置文件夹 - 我唯一拥有的 index.js 文件是我在问题中发布的那个。我以为我的 webpack.common.js / webpack.prod.js 包含必要的构建路径,不是吗?
标签: javascript html json webpack vue.js