5

Браузер: Uncaught ReferenceError: require не определён

54

У меня есть файл client.js, который загружается на стороне клиента. В этом файле есть код, который вызывает функции из других JavaScript файлов. Я пытался использовать

var m = require('./messages');

для загрузки содержимого messages.js (так же, как я делаю это на серверной стороне), а затем вызывал функции из этого файла. Однако require не определен на стороне клиента, и возникает ошибка вида Uncaught ReferenceError: require is not defined.

Эти другие JavaScript файлы также загружаются во время выполнения на клиенте, так как я размещаю ссылки на них в заголовке веб-страницы. Таким образом, клиент знает о всех функциях, которые экспортируются из этих других файлов.

Как мне вызывать эти функции из других JavaScript файлов (таких как messages.js) в основном файле client.js, который открывает сокет к серверу?

5 ответ(ов)

0

Конечно! Чтобы заменить все require выражения на import, вы можете использовать следующий подход:

  1. Откройте ваш файл и найдите все строки с require. Например:

    const Web3 = require('web3');
    const express = require('express');
    
  2. Замените их на соответствующие import выражения. Это будет выглядеть так:

    import Web3 from 'web3';
    import express from 'express';
    

Это общий пример. Пожалуйста, убедитесь, что ваш проект поддерживает ES6 модули (например, у вас должен быть установлен Babel, если вы используете Node.js). После замены все должно работать корректно.

Проверяйте документацию на предмет синтаксиса импорта, особенно для библиотек, которые могут использовать экспорт по умолчанию или именованные экспорты.

Надеюсь, это поможет! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

0

В моем случае я использовал другое решение.

Поскольку проект не требует CommonJS и должен быть совместим с ES3 (модули не поддерживаются), вам просто нужно удалить все export и import операторов из вашего кода, потому что ваш tsconfig не содержит

"module": "commonjs"

Но используйте операторы import и export в ваших подключаемых файлах

import { Utils } from "./utils";
export interface Actions {}

Сгенерированный код всегда будет содержать (по крайней мере для TypeScript 3.0) такие строки

"use strict";
exports.__esModule = true;
var utils_1 = require("./utils");
....
utils_1.Utils.doSomething();
0

Я подтверждаю. Нам следует добавить:

webPreferences: {
    nodeIntegration: true
}

Например:

mainWindow = new BrowserWindow({ webPreferences: {
    nodeIntegration: true
}});

Для меня эта проблема была решена с помощью этого решения.

0

Данный код создает новый экземпляр BrowserWindow в приложении Electron с настройками для веб-предпочтений. В частности, параметры nodeIntegration: true и contextIsolation: false указывают на то, что в рендерере будет доступен Node.js API, а также отключена изоляция контекста, что может представлять угрозу безопасности.

Вот перевод на русский в стиле ответа на StackOverflow:

window = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true, // Включает интеграцию Node.js в рендерер
        contextIsolation: false // Отключает изоляцию контекста, что может быть небезопасно
    }
});

Имейте в виду, что использование nodeIntegration: true и contextIsolation: false не рекомендуется для производственных приложений из-за соображений безопасности. Лучше использовать более безопасные конфигурации и подходы.

0

На StackOverflow часто задают вопрос, что такое метод с тегом <script>. Вот пример его использования:

<script src='./local.js'></script>

Или можно подключить скрипт с другого источника:

<script src='https://mycdn.com/myscript.js'></script>

Вам нужно подставить правильный URL для вашего скрипта.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь