Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Трудности с подключение модуля к html и js файлу одновременно (https://javascript.ru/forum/node-js-io-js/78167-trudnosti-s-podklyuchenie-modulya-k-html-i-js-fajjlu-odnovremenno.html)

Pavel_Hi 05.08.2019 10:34

Трудности с подключение модуля к html и js файлу одновременно
 
Всем привет, я постараюсь описать свою задачу как можно понятнее.
И заранее спасибо всем за ответы:)

У меня есть файл algorithm.js с которого я экспортирую объект с помощью module.exports = obj. В другом js файле я импортирую объект так let obj = require("../algorithm.js"). Все работает.

Теперь я хочу этот же файл algorithm.js, а точнее объект с этого файла импортировать в html файл. Создал <script type= "module"> и импортирую таким способом, import {obj} from "./algorithm.js", но вылазит ошибка "Запрошенный модуль не может обеспечить экспорт с именем «obj»"

Если эскопртировать объект в файле algorithm.js через export let obj={...} то html файл подключается, а js файл выдает ошибку.

Путь 100% верный. Что я упускаю?
И как мне все эти три файла подключить между собой?

Pavel_Hi 05.08.2019 11:22

Цитата:

Сообщение от Rise (Сообщение 511239)
Какую?

Синтаксическая ошибка, ругается на export - "SyntaxError: Unexpected token export"
И еще import { obj } from "algorithm" ругается на фигурные скобки {}, так я импортирую модуль в js файл

Pavel_Hi 05.08.2019 11:56

Цитата:

Сообщение от Rise (Сообщение 511243)
У меня нет ошибок:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="module">
        import { obj } from "./algorithm.js";
        console.log(obj.date);
    </script>
</head>
<body></body>
</html>
// algorithm.js
export let obj = { date: new Date };

Верно, вы подключились к html файлу, а теперь нужно algorithm.js подключить другому js файлу. В другом js файле я
импортирую тоже через import { obj } from "../algorithm.js" то тут он ругается на фигурные скобки. Я поставил две точки не просто так, ибо файл находиться в другой папке.

А вот если в файле algorithm.js сделать так
// algorithm.js
let obj = { date: new Date };
module.exports = obj


То подключается к другому js файлу, а к html файлу уже не подключается.
Я пробовал подключиться так < script src = "/путь/algorithm.js" type="text/javascript" > и не работает.

Pavel_Hi 05.08.2019 12:24

Цитата:

Сообщение от Rise (Сообщение 511248)
Что за другой файл? require и module.exports это API ноды, а не браузера, нода работает на сервере, а браузер это клиент, это две разных среды для js.

Дело в том, мне надо один js файл подключить к клиентской части и к node, одновременно.

Получается так, у меня есть файл с алгоритмом, я его хочу подключить к unit тестам и браузеру.

Вернее, я писал код c тестами и импортировал все через module.exports = obj. Но когда пришло время подключить algorithm.js к клиентской части, полезли такие проблемы.

Audaxviator 05.08.2019 13:21

Возьми, к примеру, скрипт JQuery и срисуй с него эту стандартную конструкцию. Она же так и написана, что если модуль в Ноде - то модуль, а если скрипт на странице - то переменные $ и JQuery в глобальную область window.

SuperZen 05.08.2019 14:18

Надо использовать какой-нибудь webpack и тд бандлеры...

https://webpack.js.org/guides/gettin...ating-a-bundle
здесь в примере, подключенные js скрипты в index.html, будут сами компилироваться...

можно просто скомпилировать свой algorithm.js в es5 модуль, опять же через webpack,...

вынести algorithm.js в отдельный модуль, ) использовать его как UMD модель

Pavel_Hi 05.08.2019 16:15

Цитата:

Сообщение от Audaxviator (Сообщение 511254)
Возьми, к примеру, скрипт JQuery и срисуй с него эту стандартную конструкцию. Она же так и написана, что если модуль в Ноде - то модуль, а если скрипт на странице - то переменные $ и JQuery в глобальную область window.

Это интересная идея, я попробую ее реализовать спасибо:)

Pavel_Hi 05.08.2019 16:18

Цитата:

Сообщение от SuperZen (Сообщение 511256)
Надо использовать какой-нибудь webpack и тд бандлеры...

https://webpack.js.org/guides/gettin...ating-a-bundle
здесь в примере, подключенные js скрипты в index.html, будут сами компилироваться...

можно просто скомпилировать свой algorithm.js в es5 модуль, опять же через webpack,...

вынести algorithm.js в отдельный модуль, ) использовать его как UMD модель


Ооо спасибо, я что-то о таком читал, только не помнил где и как оно называлось :)
И этот вариант испробую.

Pavel_Hi 07.08.2019 12:17

Цитата:

Сообщение от SuperZen (Сообщение 511256)
Надо использовать какой-нибудь webpack и тд бандлеры...

https://webpack.js.org/guides/gettin...ating-a-bundle
здесь в примере, подключенные js скрипты в index.html, будут сами компилироваться...

можно просто скомпилировать свой algorithm.js в es5 модуль, опять же через webpack,...

вынести algorithm.js в отдельный модуль, ) использовать его как UMD модель

Действительно помогло, решил задачу через webpack.:)
Спасибо:D


Часовой пояс GMT +3, время: 09:21.