gpt4 book ai didi

javascript - Vue 组件不渲染 & DevTools 挂起

转载 作者:行者123 更新时间:2023-11-30 20:32:46 26 4
gpt4 key购买 nike

对于这个令人困惑的标题,我深表歉意,但我对此感到非常困惑,我认为这与 Express 提供静态文件的方式有关,但不能确定。

我正在创建一个由 Express 静态提供服务的简单 Vue 应用。

server/app.js (入口点)

import express from "express";
import morgan from "morgan";
import path from "path";
import bodyParser from "body-parser";

const app = express();

// Sends static files from the public path directory
app.use(express.static(path.join(__dirname, "..", "public")));

// Use morgan to log request in dev mode
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true,
}));

app.listen(process.env.PORT || 3000, () => {
console.log(`Listening on port: ${process.env.PORT}`);
});

// Server index.html page when request to the root is made
app.get('/', (req, res, next) => {
res.sendFile("index.html", {
root: path.join(__dirname, "..", "public"),
});
});

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Hello World</title>
</head>
<body>
<div id="app"></div>
</body>
</html>

public/main.js

import Vue from "vue";
import BootstrapVue from "bootstrap-vue";
import "bootstrap/dist/css/bootstrap.min.css";
import "bootstrap-vue/dist/bootstrap-vue.css";

import App from "./App";

Vue.use(BootstrapVue);
Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
el: "#app",
components: { App },
template: "<App/>",
});

public/App.vue

<template>
Hello World!
</template>

<script>
export default {
name: "App",
};
</script>

<style>
#app {}
</style>

App.vuemain.js 只有在我取消注释该静态服务行时才会加载。

这只是一个简单的UI页面,没有什么奢侈的。在 Chrome 中,我得到一个空白页面,标签上只有标题“Hello World”。我也无法打开 DevTools,而且我的 Chrome 扩展无法识别 Vue 在页面上运行

在 Mozilla 中,结果与 Chrome 相同,但可以看到 DevTools,它只是基本的 HTML 并且没有其他文件的迹象(即使我在 public 中提供文件)正在加载.此处的日志中也没有错误。

服务器日志中没有错误。我曾经在访问根端点时在日志中获得响应,但由于某种原因,我现在不再是了。

我意识到这不是很多,但如果有人有任何初步想法,他们将不胜感激 :)

编辑

澄清一下,当我提供来自 public 的文件时目录,我可以在浏览器中点击它们,即 http://localhost:3000/App.vue

编辑 2

我添加了一个基本的 webpack.config捆绑我的 Vue 和 JS 文件,但我得到了相同的行为。

webpack.config.js

const path = require("path");
const nodeExternals = require("webpack-node-externals");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
entry: `${__dirname}/public/main.js`,
output: {
path: path.join(__dirname, "dist", "client"),
filename: "client.min.js",
},
target: "node",
resolve: {
extensions: [
".js",
".vue",
],
modules: [
"node_modules",
],
},
externals: [
nodeExternals(),
],
module: {
loaders: [
{
test: /\.vue$/,
loader: "vue-loader",
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
query: {
presets: [
"es2015",
],
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true,
}),
],
};

在 Firefox 中查看 DevTools 时,<script>包括 client.min.js存在,但仍未显示任何内容。

最佳答案

您当前的项目结构需要像 Webpack 这样的打包器。正如评论中所提到的,这不是您可以简单地“稍后添加”的东西。

首先,单文件.vue组件必须构建。浏览器不知道如何解释格式。此任务通常由 loader 完成(参见 https://github.com/vuejs/vue-loader )。

其次,浏览器通常不支持模块导入(虽然这正在改变)所以你需要一些东西来转换所有这些 import将语句组合成可以在您的 HTML 页面中执行的脚本包。

我强烈建议您通过 vue-cli 工具启动您的项目。参见 https://github.com/vuejs/vue-cli .


您可以通过将 Vue 包含在您的 HTML 页面中来使用它,即

<script src="https://cdn.jsdelivr.net/npm/vue"></script>

但这将从根本上改变您的源代码的组织方式,您可能会发现无法使用某些第 3 方包含,除非它们也支持通用 <script>标签使用。您需要使用 Vue.component() 创建组件(或类似的)语法。

关于javascript - Vue 组件不渲染 & DevTools 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com