Браузер: Uncaught ReferenceError: require не определён
У меня есть файл client.js
, который загружается на стороне клиента. В этом файле есть код, который вызывает функции из других JavaScript файлов. Я пытался использовать
var m = require('./messages');
для загрузки содержимого messages.js
(так же, как я делаю это на серверной стороне), а затем вызывал функции из этого файла. Однако require
не определен на стороне клиента, и возникает ошибка вида Uncaught ReferenceError: require is not defined
.
Эти другие JavaScript файлы также загружаются во время выполнения на клиенте, так как я размещаю ссылки на них в заголовке веб-страницы. Таким образом, клиент знает о всех функциях, которые экспортируются из этих других файлов.
Как мне вызывать эти функции из других JavaScript файлов (таких как messages.js
) в основном файле client.js
, который открывает сокет к серверу?
5 ответ(ов)
Конечно! Чтобы заменить все require
выражения на import
, вы можете использовать следующий подход:
Откройте ваш файл и найдите все строки с
require
. Например:const Web3 = require('web3'); const express = require('express');
Замените их на соответствующие
import
выражения. Это будет выглядеть так:import Web3 from 'web3'; import express from 'express';
Это общий пример. Пожалуйста, убедитесь, что ваш проект поддерживает ES6 модули (например, у вас должен быть установлен Babel, если вы используете Node.js). После замены все должно работать корректно.
Проверяйте документацию на предмет синтаксиса импорта, особенно для библиотек, которые могут использовать экспорт по умолчанию или именованные экспорты.
Надеюсь, это поможет! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
В моем случае я использовал другое решение.
Поскольку проект не требует 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();
Я подтверждаю. Нам следует добавить:
webPreferences: {
nodeIntegration: true
}
Например:
mainWindow = new BrowserWindow({ webPreferences: {
nodeIntegration: true
}});
Для меня эта проблема была решена с помощью этого решения.
Данный код создает новый экземпляр BrowserWindow
в приложении Electron с настройками для веб-предпочтений. В частности, параметры nodeIntegration: true
и contextIsolation: false
указывают на то, что в рендерере будет доступен Node.js API, а также отключена изоляция контекста, что может представлять угрозу безопасности.
Вот перевод на русский в стиле ответа на StackOverflow:
window = new BrowserWindow({
webPreferences: {
nodeIntegration: true, // Включает интеграцию Node.js в рендерер
contextIsolation: false // Отключает изоляцию контекста, что может быть небезопасно
}
});
Имейте в виду, что использование nodeIntegration: true
и contextIsolation: false
не рекомендуется для производственных приложений из-за соображений безопасности. Лучше использовать более безопасные конфигурации и подходы.
На StackOverflow часто задают вопрос, что такое метод с тегом <script>
. Вот пример его использования:
<script src='./local.js'></script>
Или можно подключить скрипт с другого источника:
<script src='https://mycdn.com/myscript.js'></script>
Вам нужно подставить правильный URL для вашего скрипта.
Как перенаправить на другую веб-страницу?
Где найти документацию по форматированию даты в JavaScript?
Как определить нажатие клавиши Esc?
Как проверить, содержит ли массив строку в TypeScript?
Ссылка и выполнение внешнего JavaScript-файла, размещенного на GitHub