Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Module parse failed: The keyword 'interface' is reserved (https://javascript.ru/forum/library-toolkit-framework/86166-module-parse-failed-keyword-%27interface%27-reserved.html)

Raadsert 05.11.2024 19:06

Module parse failed: The keyword 'interface' is reserved
 
Пробовал загрузить собственный пакет в npm но после скачивания выдаёт ошибку "Module parse failed: The keyword 'interface' is reserved".

Информация из package.json
"main": "src/index.tsx",
  "files": [
    "src"
  ],
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^7.3.1",
    "@typescript-eslint/parser": "^7.3.1",
    "eslint": "^8.57.0",
    "eslint-plugin-import": "^2.29.1",
    "eslint-plugin-prettier": "^5.1.2",
    "eslint-import-resolver-typescript": "^3.6.1",
    "eslint-plugin-react": "^7.34.1",
    "eslint-plugin-react-hooks": "^4.6.0"
  },
  "dependencies": {
    "react": "^18.0.0",
    "typescript": "^5.5.4"
  }


Долго искал решение этой проблемы но развёрнутого ответа нигде не было. Так же пробовал смотреть как это работает в других пакетах, но там всё тоже что указано сверху. Может кто-то может рассказать как решить эту проблему?

Aetae 05.11.2024 19:20

Нужно добавить опцию типа transpileDependencies\transpilePackages(или что там у твоего сборщика) и указать там твой пакет.

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

P.S. В идеале и ты должен свой пакет в npm фигачить в скомпилированном виде, чтоб избежать возможных несовместимостей версий ts в будущих проектах, но тут тебе видней.

Raadsert 10.11.2024 16:10

Цитата:

Сообщение от Aetae (Сообщение 556372)
Нужно добавить опцию типа transpileDependencies\transpilePackages(или что там у твоего сборщика) и указать там твой пакет.

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

P.S. В идеале и ты должен свой пакет в npm фигачить в скомпилированном виде, чтоб избежать возможных несовместимостей версий ts в будущих проектах, но тут тебе видней.

А компилятор автоматически объединяет импорты всех файлов в один, если указать компиляцию только index файла пакета?

Aetae 10.11.2024 19:20

Raadsert, ответа нет. Так как нет в js никакого однозначного "компилятора". Разве что: "как настроишь - так и будет".

Если говорить о сборщиках(webpack, vite, rollup...), то они обычно собирают таки в один файл.
Если говорить о транспиляторе тайпскипта(tsc), то он в голом виде транспилирует только указанный файл или все файлы раздельно.

Raadsert 10.11.2024 20:01

Цитата:

Сообщение от Aetae (Сообщение 556372)
Нужно добавить опцию типа transpileDependencies\transpilePackages(или что там у твоего сборщика) и указать там твой пакет.

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

P.S. В идеале и ты должен свой пакет в npm фигачить в скомпилированном виде, чтоб избежать возможных несовместимостей версий ts в будущих проектах, но тут тебе видней.

Цитата:

Сообщение от Aetae (Сообщение 556394)
Raadsert, ответа нет. Так как нет в js никакого однозначного "компилятора". Разве что: "как настроишь - так и будет".

Если говорить о сборщиках(webpack, vite, rollup...), то они обычно собирают таки в один файл.
Если говорить о транспиляторе тайпскипта(tsc), то он в голом виде транспилирует только указанный файл или все файлы раздельно.

А если говорить о tsup? Он сейчас наиболее удобный, как я понял. Он ведь должен все функции, вызваные через import, перетащить в index файл, или нет?

Aetae 10.11.2024 20:36

Хз, не пользовался. Запусти да посмотри на результат.

Существует множество разных вариантов поставки: как целый однофайловый бандл, так и набор модулей с импортами. Браузер умеет из укоробки работать с модулями раскидными по файлам в формате esm, node умеет работать с esm и common'js. Существует так же множество иных не-нативных систем, типа amd или system.js, и множество способов собирать в один файл.


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