Как импортировать файлы js
Здравствуйте, как импортировать файлы и использовать функции из них:
Содержимое Файла который лежит в папке с программой: // module1.js // При добавлении ключевого слова export // выражение становится экспортированным. export function sum(a, b) { return a + b } // Экспортировать можно не только функции, // но и константы: export const SOME_SETTINGS_FLAG = false export const user = {} export const books = ["Война и мир", "Мастер и Маргарита"] import ("./module1.js"); // файл лежит в папке с программой books; // не работает ( |
Цитата:
https://habr.com/ru/company/domclick/blog/532084/ |
Цитата:
Error $30002: JavaScript failed to compile. Name: SyntaxError Message: 'import' or 'export' can only be used in module code. Source: import * as customName from ("./module1.js"); Line: 0 Column: 1 |
Цитата:
import {books} from "./module1.js"; |
Цитата:
Цитата:
|
Цитата:
import {books} from ("./module1.js"); Error $30002: JavaScript failed to compile. Name: SyntaxError Message: 'import' or 'export' can only be used in module code. Source: import {books} from ("./module1.js"); Line: 0 Column: 0 |
Мне кажется, в node модули должны иметь расширение .mjs, а не .js
Node не понимает, что module1.js - это модуль. И дает синтаксическую ошибку, что операторы export и import допустимы только в модулях. |
Там смотря какой режим "включен"... Если строгий - импорт. А по умолчанию работает рекваер...
const {books} = require("./module1.js") Но и модуль тогда "оформляется" иначе // function test() { // } module.exports = {test} |
При чем тут require?
Он же import использует. |
Цитата:
Вот статейка про то как перейти с require на import в Ноде. https://habr.com/ru/company/ruvds/blog/556744/ |
Статью не открывал, но чтоб перейти в ноде с require на import достаточно в package.json дописать "type": "module", остальное лирика.)
noveek, ну и скобочки куда ни попадя пихать не надо. Просто import { books } from "./module1.js"; |
Пока ничего не помогло единственное вот так:
import ("./module1.js"); Выдаёт: [object Promise] |
noveek, ты с упорством носорога делаешь совсем не то...
Почитай хоть статьи про работу с модулями... Ссылки я тебе дал. Да и тут уже много чего уже написали. |
Цитата:
|
Цитата:
Не помогло "type": "module" в package.json? Цитата:
https://developer.mozilla.org/ru/doc...BE%D1%80%D1%82 |
Цитата:
https://www.winsoft.sk/jsengine.htm Из под него уже пытаюсь импортировать модули .js извините следовало сразу обрисовать всю ситуацию ) В свою очередь он использует ChakraCore https://github.com/chakra-core/ChakraCore То есть скрипт из под Delphi выглядит так сейчас: procedure TForm1.Button1Click(Sender: TObject); var MyObject: JsValueRef; Result: JsValueRef; begin try Engine := TJSEngine.Create; Memo1.Lines.Text:=Engine.ConvertToString(Engine.RunScript('import ("./module1.js");')); except on E: Exception do ShowException(Memo2, E); end Engine.Free; end; |
Хз, если тебе пишет что незя использовать import - это одно, значит надо заставить твою хрень как-то воспринимать скрипт как модуль, консольная версия chakracore при беглом взгляде по issue вроде может это с параметром -es6module, как оный задать в твоей приблуде - хз, сам смотри.
Если же у тебя нормально запускаются скрипты с import - вопросы иной: import "file.js"; в начале файла - импортировать простой скрипт(не модуль) в начале модуля. import some from "file.js"; в начале файла - импортировать конкретное экспортированаое начение из модуля. import("file.js") в любом месте - асинхронно запросить модуль и вернуть Promise разрешающийся в объект с экспортируемыми модулем значениями. Как работать с асинхронными операциями - опять же - тебе самому разбираться. |
Цитата:
Message: 'window' is not defined Я понимаю что объект пустой так как я запускаю не через браузер, а вот чем заменить не понимаю пока: Memo1.Lines.text:=StringReplace(Memo1.Lines.text, 'window', 'Object',[rfReplaceAll, rfIgnoreCase]); Строка в скрипте например так идёт: var hasStrongCrat = 'crat' in window && window['crat'] !== null; |
this / global
Если и этого нет, то можно в начале самому задать и не париться особо: window = {}; Цитата:
|
Цитата:
https://www.winsoft.sk/download/jsenginedemo.zip там работает так просто в окно вписываешь скрипт нажимаешь кнопку Run =) |
Цитата:
|
noveek, чем хочешь. В нормально окружении они и так есть.
Тупо пиши руками console = { log: function(){ что-то(arguments) }, warn: function() { что-то(arguments) } } Где "что-то" предоставляемый средой способ вывода в консоль\вывод в shell\вывод в лог\что хочешь. |
Часовой пояс GMT +3, время: 14:14. |