【发布时间】:2020-02-01 15:28:39
【问题描述】:
我有两个不同的 server.js 和 client.js 入口点。(我正在使用 vue-server-renderer 和 laravel-mix)-(我的 server.js 和 client.js 看起来与此处描述的完全一样-@ 987654321@ 如果我进行静态导出 import Test from '../views/Test' 它可以工作..
如果我尝试在不延迟加载的情况下导入路由,SSR 可以:
import Test from "../views/Test";
export const routes = [{
path: '/my-route',
name: "Test",
component: Test,
}]
但如果我尝试延迟加载,它会在 SSR 上失败:
export const routes = [{
path: '/my-route',
name: "Test"
component: () => import('../views/Test.vue'),
}]
找不到模块'./js/chunks/server/0.js?id=c3384f174123f0848451'
对于() => import('../views/Home.vue),client.js 有效,只有 server.js 无效。
我的server.js:
import renderVueComponentToString from 'vue-server-renderer/basic';
import app from './app';
import {router} from './router/index';
new Promise((resolve, reject) => {
router.push(context.url);
router.onReady(() => {
resolve(app);
}, reject);
})
.then(app => {
renderVueComponentToString(app, (err, res) => {
if (err) throw new Error(err);
dispatch(res);
});
});
完整的错误是:
命令“/usr/bin/node /home/vagrant/Code/project/storage/app/ssr/1228cfee3f79dc5949bd898950384e53.js”失败退出代码:1(一般错误)
工作目录:/home/vagrant/Code/project/public 输出:
================ 错误输出:================ internal/modules/cjs/loader.js:628 throw呃; ^
错误:找不到模块'./js/chunks/server/0.js?id=c3384f174123f0848451'
更新
我想我可能知道为什么会发生这种情况(我可能错了):
export const routes = [{
path: '/',
name: "Home",
component: () => import('../views/Home')
}]
使用此代码,我得到一个错误:
错误:找不到模块'./js/chunks/server/0.js?id=c3384f174123f0848451'
命令“/usr/bin/node /home/vagrant/Code/project/storage/app/ssr/717358e60bfd52035a1e58256cdfbba0.js”失败。退出代码:1(一般错误)工作目录:/home/vagrant/Code/project/public 输出:================ 错误输出:======== ======== internal/modules/cjs/loader.js:628 throw err; ^ 错误:找不到模块 './js/chunks/server/0.js?id=c3384f174123f0848451'
查看路径:
在我编译的文件中(位于public/js)我有这一行:
var chunk = require("./js/chunks/server/" + ({}[chunkId]||chunkId) + ".js?id=" + {"0":"c3384f174123f0848451"}[chunkId] + "");
这似乎是一个相对路径。但是,该文件实际上是在我在 config/ssr.php - 'temp_path' => storage_path('app/ssr') 中指定的文件中运行的 - 所以它找不到路径。
但是,即使我将temp_path 更改为public_path() 以便它可以从./js/chunks/server/(即public/js/chunks/server/0.js)中找到块,它仍然会抛出相同的错误。即使 SSR 的 temp_path 不同。
命令“/usr/bin/node /home/vagrant/Code/project/public/3560d8d101faa4bdef316054b14873cc.js”失败。退出代码:1(一般错误)工作目录:/home/vagrant/Code/project/public 输出:================ 错误输出:======== ======== internal/modules/cjs/loader.js:628 throw err; ^ 错误:找不到模块 './js/chunks/server/0.js?id=c3384f174123f0848451'
另外,如果我在renderVueComponentToString() 中console.log(_dirname) 它返回我'/'
【问题讨论】:
标签: javascript vue.js webpack vue-router laravel-mix