首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inertia.js ssr: ReferenceError:文档未定义

Inertia.js ssr: ReferenceError:文档未定义
EN

Stack Overflow用户
提问于 2022-02-07 15:35:08
回答 1查看 1K关注 0票数 4

我使用的是Inertia.js版本为0.5.4的Laravel 8。有人能帮忙解决这个问题吗?没有ssr,这个应用程序工作得很好。我认为问题在Webpack配置文件中。

ReferenceError:文档未定义

package.json

代码语言:javascript
复制
"@inertiajs/inertia": "^0.11.0",
"@inertiajs/inertia-vue": "^0.8.0",
"laravel-mix": "^6.0",
"sass": "~1.32",
"sass-loader": "^12.2.0",
"vue-cli-plugin-vuetify": "~2.3.1",
"vue-loader": "^15.9.6",
"vue-template-compiler": "^2.6.10",
"vuetify-loader": "^1.7.0",
"webpack": "^5.59.1",
"vue": "^2.6.14",
"vue-server-renderer": "^2.6.14",
"vuetify": "^2.5.5",
"vuetifyjs-mix-extension": "0.0.20",
"vuex": "^3.4.0",
"webpack-node-externals": "^3.0.0"

webpack.ssr.mix.js

代码语言:javascript
复制
const path = require('path')
const mix = require('laravel-mix')
const webpackNodeExternals = require('webpack-node-externals');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

mix
    .options({ manifest: false, processCssUrls: false })
    .js('resources/js/ssr.js', 'public/js')
    .vue({
        version: 2, options: { optimizeSSR: true }
    })
    .webpackConfig({
        resolve: {
            alias: {
                '@resources': path.resolve('resources'),
                '{Template}': path.resolve('resources/js/Themes/default'),
                '@themeConfig': path.resolve('themeConfig.js'),
                '@core': path.resolve('resources/@core'),
                '@axios': path.resolve('resources/js/plugins/axios.js'),
                '@user-variables': path.resolve('resources/sass/variables.scss'),
                '@sass': path.resolve('resources/sass/'),
                'apexcharts': path.resolve(__dirname, 'node_modules/apexcharts-clevision'),
                '@': path.resolve('resources/js'),
            },
        },
        plugins: [new MiniCssExtractPlugin(
            {
                filename: "[name].css",
                chunkFilename: "[id].css",
                linkType: false,
            }
        )],
        module: {
            rules: [
                {
                    test: /\.vue$/,
                    loader: 'vue-loader',
                    options: {
                        // enable CSS extraction
                        extractCSS: true
                    }
                }
                // ...
            ]
        },
        target: 'node',
        devtool: 'source-map',
        externals: [webpackNodeExternals({
            // this WILL include `jquery` and `webpack/hot/dev-server` in the bundle, as well as `lodash/*`
            allowlist: [/^vuetify/, /^lodash/, 'vue-tel-input-vuetify/lib', /^vue-tel-input-vuetify^/, /^apexcharts^/, /^vue-apexcharts/, /apexcharts/, /apexcharts-clevision/, /^apexcharts-clevision/, /^apexcharts-clevision^/, /^vue-country-flag/, /\.css$/]
        })],
    })

ssr.js

代码语言:javascript
复制
import Vue from 'vue'
import {createRenderer} from 'vue-server-renderer'
import {createInertiaApp} from '@inertiajs/inertia-vue'
import createServer from '@inertiajs/server'
import PortalVue from 'portal-vue';
import store from './store'
import './plugins/acl'
import VueCompositionAPI from '@vue/composition-api'
import VueMeta from 'vue-meta'
import vuetify from '@/plugins/vuetify'
import Layout from '@/Layouts/AdminLayout.vue'
import AppLayout from "@/Layouts/AppLayout.vue"
import UserLayout from "@/Layouts/UserLayout.vue"
import ClientOnly from 'vue-client-only'

const moment = require('moment');


createServer((page) => createInertiaApp({
    page,
    render: createRenderer().renderToString,
    // resolve: name => require(`./Pages/${name}`),
    resolve: (name) => {
        // const page = (await import(`./Pages/${name}`)).default
        const page = require(`./Pages/${name}`);
        if (page.layout === undefined && name.startsWith('Admin/')) {
            page.layout = Layout
        }
        if (page.layout === undefined && name.startsWith('Dashboard/')) {
            page.layout = Layout
        }
        if (page.layout === undefined && name.startsWith('UserDashboard/')) {
            page.layout = UserLayout
        }
        if (page.layout === undefined && !name.startsWith('Admin/') && !name.startsWith('Dashboard/')) {
            page.layout = AppLayout
        }

        return page
    },
    setup({app, props, plugin}) {
        Vue.use(plugin);
        Vue.use(VueCompositionAPI);
        Vue.use(PortalVue);
        Vue.component('client-only', ClientOnly)

        Vue.use(VueMeta, {
            // optional pluginOptions
            refreshOnceOnNavigation: true
        })

        Vue.mixin({methods: {route}});

        return new Vue({
            vuetify: vuetify,
            store,
            render: h => h(app, props),
        })
    },
}))

代码语言:javascript
复制
npx mix --mix-config=webpack.ssr.mix.js
result : webpack compiled successfully 

节点public/js/ssr.js

错误: var样式= document.createElement(' style ');^ ReferenceError:文档未在insertStyleElement、addStyle、addStyle、modulesToDom、(C:\laragon\www\test2\public\js\ssr.js:44977:18)、module.exports、(C:\laragon\www\test2\public\js\ssr.js:45135:25)模块./resources/sass/overrides.scss (C:\laragon\www\gooreo2\public\js\ssr.js:41942:145) at webpack_require (C:\laragon\www\test2\public\js\ssr.js:130966:42) at Module../resources/js/plugins/vuetify/default-preset/preset/index.js (C:\laragon\www\test2\public\js\ssr.js:38073:1) at webpack_require (C:\laragon\www\test2\public\js\ssr.js:130966 ):42)在Module../resources/js/plugins/vuetify/index.js (C:\laragon\www\test2\public\js\ssr.js:38099:80) at webpack_require (C:\laragon\www\test2\public\js\ssr.js:130966:42)

public/js/ssr.js

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 07:05:35

您可以通过在webpack.mix.js中添加一行来选择使用vue-style-loader来解决这个问题。

代码语言:javascript
复制
mix
.js('resources/js/ssr.js', 'public/js')
.vue({
    version: 3,
    useVueStyleLoader: true // This should fix it! 
});

参考文献:https://aaronfrancis.com/2021/vue-referenceerror-document-is-not-defined-at-insertstyleelement

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71021198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档