从Vue.js移植到Nuxt.js时出现错误。
我尝试在node_modules
中使用vue-session
。它编译成功,但在浏览器中我看到错误:
未定义参考错误窗口node_modules\vue-session\index.js
:
VueSession.install = function(Vue, options) {
if (options && 'persist' in options && options.persist) STORAGE = window.localStorage;
else STORAGE = window.sessionStorage;
Vue.prototype.$session = {
flash: {
parent: function() {
return Vue.prototype.$session;
},
所以,我遵循this documentation:rewardadd.vue
:
import VueSession from 'vue-session';
Vue.use(VueSession);
if (process.client) {
require('vue-session');
}
nuxt.config.js
:
build: {
vendor: ['vue-session'],
但我还是解决不了这个问题。
9条答案
按热度按时间enyaitl31#
未定义窗口错误是由于nodejs服务器端脚本无法识别仅浏览器自带的窗口对象而导致的。
对于nuxt v2.4,您不需要添加
process.client
或process.browser
对象。通常你的nuxt插件目录结构如下:
然后在**
nuxt.config.js
**中,您可以使用以下两种方法向项目添加插件:将值为**'client'的mode**属性添加到插件中
用扩展名***. client. js*重命名你的插件,然后将其添加到nuxt. config. js**plugins中的插件。Nuxt 2.4.x将根据所使用的扩展名识别插件扩展名是呈现在服务器端 *
.server.js
* 还是客户端 *.client.js
*。注意:添加不带 *
.client.js
* 或 *.server.js
* 扩展名的文件将在客户端和服务器端呈现插件。vql8enpb2#
在服务器端呈现端没有窗口对象,但快速修复方法是检查
process.browser
。这是一个有点草率的方法,但是它是有效的。这里有一个关于如何使用plugins to do it better的很好的文章。
qlfbtfca3#
这在nuxt文档和常见问题解答中都有介绍。首先你需要把它做成一个插件。其次你需要把你的插件做成客户端的
此外,供应商是不使用nuxt2.x和您的进程。客户端不需要,如果其在插件与ssr假
wnvonmuf4#
在Nuxt 3中,
process.client
的用法如下:wlzqhblo5#
如果你已经尝试了这里的大多数答案,但它对你不起作用,看看这个,我在使用Paystack(一个支付包)时也遇到了同样的问题。
创建一个扩展名为
.client.js
的插件,以便仅在客户端呈现。因此,在plugins
文件夹中,创建一个文件“vue-session.client.js”作为插件,并放入以下代码因此在
nuxt.config.js
中,根据插件路径注册插件在index.vue或任何你想使用包的页面中...导入已挂载的包,这样当客户端页面挂载时它就可用了...
2w3kk1z56#
您可以检查您是使用客户端还是使用浏览器运行。SSR中未定义
window
mnemlml87#
延迟加载对我很有效。在Vue中延迟加载组件就像使用函数中 Package 的动态导入来导入组件一样简单。我们可以延迟加载StepProgress组件,如下所示:
lmvvr0a88#
除了这里所有的答案,你还可以面对一些其他的软件包,不兼容SSR的开箱即用,这将需要一些黑客工作正常.这里是my answer的细节.
TLDR是指您有时需要:
process.client
<client-only>
标记const Ace = await import('ace-builds/src-noconflict/ace')
components: { [process.client && 'VueEditor']: () => import('vue2-editor') }
gmol16399#
对我来说,这是在Nuxt中使用顶点图表的情况,所以我必须将
ssr: false
添加到nuxt.config.js中。