В хранилище хранится только код на стороне клиента Nuxt.js

#vue.js #vuex #nuxtjs

#vue.js #vuex #nuxtjs

Вопрос:

Я пытаюсь перенести свое приложение Vue на nuxt.js и столкнулся с проблемой с модулем хранилища, в который я импортирую библиотеку криптографических узлов. Эта библиотека обращается к объекту «window», который, естественно, существует только на стороне клиента. Сам факт нахождения этого модуля в каталоге магазина приводит к сбою приложения. AFAIK, я могу импортировать его как плагин в nuxt.config.js но как мне после этого прикрепить его к магазину? Спасибо!

На самом деле, я больше не уверен, вызвана ли ошибка SSR, поскольку я вижу ее в браузере. Просто подумал, что это так из-за того, что «окно не определено». Я также пытался импортировать crypto-pro на страницу — он выдает ту же ошибку. Естественно, в обычном проекте vue это работает нормально.

Вот мой store/index.js

 import crypto from "../plugins/crypto";

export const plugins = [crypto];

export const state = () => ({

});
  

Вот crypto.js модуль. В

 import Vue from 'vue';
import {createHashSignature, getHashedData, getUserCertificates, isValidSystemSetup, verifySignature } from 'crypto-pro';
import FileReader from '@tanker/file-reader';

export default {
    namespaced: true,
    state: {some state},
    mutations: {some mutations},
    actions: {some actions}
}
  

Вот что я получаю, когда пытаюсь открыть сайт

Окно ReferenceError не определено

 node_modulescrypto-prolibcrypto-pro.js

        define("cryptoPro", [], factory);
    else if(typeof exports === 'object')
        exports["cryptoPro"] = factory();
    else
        root["cryptoPro"] = factory();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = {};
/******/
/******/    // The require function
  

сам модуль crypto-pro представляет собой API для работы с плагином браузера, который подключается к провайдеру криптографии на ПК пользователя.

Комментарии:

1. Есть ли какие-либо записи в журнале, выходные данные, … вы можете поделиться? Приходит ли какое-либо сообщение об ошибке?

2. if(process.client) { ... } это может быть?

Ответ №1:

Вы можете создать плагин, подобный этому:

 export default function ({ store }) {
  if (process.client) {
     //do something on client side
  }
}
  

Деструктура store вне контекста

Комментарии:

1. Да, это то, о чем я сначала подумал, но, похоже, моя проблема начинается с того, как работает модуль crypto-pro в проекте nuxt.