Как импортировать модуль из index.js

Я создал пример node.js проекта:

  "name": "example",
  "version": "1.0.0",
  "type": "module",

Вот index.js (только две строки):

"use strict";
import MapLibreGlDirections, { LoadingIndicatorControl } from "@maplibre/maplibre-gl-directions";

Установите «@maplibre/maplibre-gl-directions» в глобальном масштабе:

# npm install "@maplibre/maplibre-gl-directions" --global

Теперь запустите index.js с узлом:

# node index.js

Вот ошибка:

node:internal/errors:496
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@maplibre/maplibre-gl-directions' imported from /root/Documents/test/index.js
    at new NodeError (node:internal/errors:405:5)
    at packageResolve (node:internal/modules/esm/resolve:890:9)
    at moduleResolve (node:internal/modules/esm/resolve:939:20)
    at defaultResolve (node:internal/modules/esm/resolve:1132:11)
    at nextResolve (node:internal/modules/esm/loader:163:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:835:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40)
    at link (node:internal/modules/esm/module_job:76:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Node.js v18.18.2

Я скопировал «импорт» отсюда: https://github.com/maplibre/maplibre-gl-directions

В пакете «@maplibre/maplibre-gl-directions» уже есть been installed in global, but index.js still can't find the module (ERR_MODULE_NOT_FOUND).

Что не так в index.js? Как импортировать этот модуль?

Обновлять:

После установки vite в глобальном масштабе с помощью npm попробуйте собрать следующие файлы и содержимое, но это не сработает.

пакет.json:

{
  "name": "example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "author": "",
  "license": "ISC"
}

индекс.js:

"use strict";
import MapLibreGlDirections, { LoadingIndicatorControl } from "@maplibre/maplibre-gl-directions";

console.info("hello world in console");

function hello() {
  document.write("hello world in document")
}

module.exports = hello;

индекс.html:

<html>
<head>
  <script src = "index.js"></script>
</head>
<body>
  hello world in body!
  <script type = "javascript">
    new hello()
  </script>
</body>
</html>

После запуска:

# npm run build
# npm run preview

Вот вывод в Firefox:

hello world in body! 

Вот ожидаемый результат в Firefox:

hello world in body! 
hello world in document!

vite не создает «index.js» в проекте. Как заставить этот пример проекта работать с vite build?

Обновление 2:

После добавления в скрипт:

<script type = "module" src = "index.js"></script>

Затем перестройте с помощью: npm run build

error during build:
Error: [vite]: Rollup failed to resolve import "@maplibre/maplibre-gl-directions" from "/root/Documents/test/index.js".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`

Он по-прежнему не может найти модуль с vite, это то же самое, что и node. В чем проблема импортировать этот модуль из index.js?

Обновление 3:

vite.config.js: (только одна строка)

import { defineConfig } from 'vite'

Затем восстановите:

failed to load config from /root/Documents/test/vite.config.js
error during build:
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'vite' imported from /root/Documents/test/vite.config.js.timestamp-1710392651394-3723eb717de11.mjs
    at new NodeError (node:internal/errors:405:5)
    at packageResolve (node:internal/modules/esm/resolve:916:9)
    at moduleResolve (node:internal/modules/esm/resolve:973:20)
    at defaultResolve (node:internal/modules/esm/resolve:1193:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:403:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:372:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:39)
    at link (node:internal/modules/esm/module_job:75:36)

То самое ERR_MODULE_NOT_FOUND!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
202
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо использовать этот пакет в среде браузера, а не использовать Node для его выполнения.

<!doctype html>
<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <link rel = "icon" type = "image/svg+xml" href = "/vite.svg" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <title>Vite + React + TS</title>
  </head>
  <body>
    <div id = "root"></div>
    <script type = "module" src = "/src/main.tsx"></script>
  </body>
</html>
{
  "name": "demo",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
  },
  "dependencies": {
    "@maplibre/maplibre-gl-directions": "^0.6.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/react": "^18.2.64",
    "@types/react-dom": "^18.2.21",
    "@typescript-eslint/eslint-plugin": "^7.1.1",
    "@typescript-eslint/parser": "^7.1.1",
    "@vitejs/plugin-react": "^4.2.1",
    "eslint": "^8.57.0",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.4.5",
    "typescript": "^5.2.2",
    "vite": "^5.1.6"
  }
}
// Import the plugin
import MapLibreGlDirections, { LoadingIndicatorControl } from "@maplibre/maplibre-gl-directions";

// Make sure to create a MapLibreGlDirections instance only after the map is loaded


function App() {
  console.info(MapLibreGlDirections);
  console.info(LoadingIndicatorControl);
  return (
    <>
    </>
  )
}

export default App

vite.config.ts

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
})

пожалуйста, проверьте папку dist

Я хочу создать свой пакет для импорта этого модуля, а затем использовать его в браузере. Является ли это возможным?

stackbiz 13.03.2024 19:44

конечно. Вам нужно использовать некоторые инструменты для создания пакетов. Webpack, режим библиотеки Vite, tsup и т. д.

Martin Adams 13.03.2024 20:00

Я часто использую Vite для создания собственных пакетов и публикации их на npm. Эта статья может вам помочь. rbardini.com/how-to-build-ts-library-with-vite

Martin Adams 13.03.2024 20:07

Я пытался собрать с помощью Vite, но не получилось. Можете ли вы помочь проверить мой обновленный пост? Спасибо.

stackbiz 14.03.2024 05:13

Я добавил обновление 2, при сборке с помощью vite возникает та же ошибка. Помогите, пожалуйста, проверить.

stackbiz 14.03.2024 05:53

Я добавил vite.config.js в «update 3», то же самое module not found для глобально установленного vite пакета.

stackbiz 14.03.2024 06:05

Пожалуйста, предоставьте мне свой репозиторий кода на GitHub. Я из Восточного Восьмого округа. Вечером я вытащу предоставленный вами код и помогу разобраться в этой проблеме. Как насчет этого?

Martin Adams 14.03.2024 06:14

Спасибо, я только что создал свой самый первый проект «node.js» в локальной папке документов. Все файлы указаны в посте. Я пытаюсь собрать модуль со своим собственным пакетом, а затем использовать свой пакет в качестве «обертки» модуля импорта. Я хочу использовать эти несколько простых файлов для изучения node.js.

stackbiz 14.03.2024 06:33
github.com/kbysiec/vite-vanilla-ts-lib-starter Я искал, и этот проект может решить вашу проблему. src/index.ts Вот запись пакета для всего проекта. Но я не знаю, знаком ли вам Typescript. Для упаковки собственного пакета npm необходимо освоить детали настройки многих инструментов настройки. Рекомендую обратиться к соответствующим шаблонам проектов.
Martin Adams 14.03.2024 07:29

Другие вопросы по теме