В пакете импорта Javascript не удалось разрешить спецификатор модуля

#javascript

#javascript

Вопрос:

Я пытаюсь импортировать модуль, который я загрузил с помощью npm.

Мой файл json:

 {
  "name": "nodejs-web-app1",
  "version": "0.0.0",
  "description": "NodejsWebApp1",
  "main": "server.js",
  "author": {
    "name": ""
  },
  "dependencies": {
    "fs": "^0.0.1-security",
    "http": "^0.0.1-security",
    "node-pandas": "^1.0.5",
    "node-static": "^0.7.11",
    "require": "^2.4.20",
  },
}
 

У меня есть мой html-файл :

 <!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>Home</title>
    <script type="module" src="functions.js"></script>
    <link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
    <h1>Dashboard</h1>
    <p>Welcome!</p>
    <button onclick="scraper()">CLICK</button>
    <label id="label">Reponse</label>
</body>

</html>
 

мой functions.js файл

 import pd from 'node-pandas';
function scraper() {
    const s = pd.Series([1, 9, 2, 6, 7, -8, 4, -3, 0, 5])
    console.log(s);
    document.getElementById('label').innerHTML = 'A computer science portal for geeks';
}
 

и мой server.js файл:

 var nStatic = require('node-static');
var http = require('http');
var fs = require('fs');
var port = process.env.PORT || 8080;

var file = new nStatic.Server(__dirname);

http.createServer(function (req, res) {
    file.serve(req, res);
}).listen(port);
 

Но при запуске кода у меня возникает ошибка

Неперехваченная ошибка типа: не удалось разрешить спецификатор модуля «node-pandas». Относительные ссылки должны начинаться либо с «/», «./», либо с «../».

Я пытался, но он также выдает другую ошибку.

Если я напишу:

 import pd from './node-pandas';
 

или

 import pd from '../node-pandas';
 

Я получаю:

ПОЛУЧИТЬ http://localhost:1337/node-pandas net::ОШИБКА_АБОРТИРОВАНА 404 (Не найдена)

Мой проект имеет такую структуру:

  • myproject
    • server.js
    • functions.js
    • index.html
    • package.json
    • node_modules
      • узел-pandas

И я использую Visual Studio 2019

Любая идея, что я делаю неправильно, пожалуйста?

Ответ №1:

У меня была точно такая же проблема (я полный новичок).

Я установил через NPM зависимость, и в рамках этого проекта они использовали оператор импорта, например

 import pd from './node-pandas';
 

вместо

 import pd from './node-pandas.js';
 

Итак, у меня была ситуация, когда на реальном сервере размещался файл javascript на «http://localhost/scriptname.js » в то время как проект искал этот файл вместо этого на «http://localhost/scriptname » (без расширения .js)

Я мог бы, конечно, добавить .js в оператор импорта, но тогда мне пришлось бы делать это для ВСЕХ операторов импорта во всех файлах этого внешнего проекта.

Странно, что об этой ошибке не так много информации, но в целом:

  • Существует что-то вроде спецификаторов модулей и относительных ссылок на импорт: https://sbcode.net/threejs/module-specifiers /
  • Вы можете использовать только относительные ссылки на импорт. Если вы хотите использовать спецификаторы модуля, вам нужен инструмент для их разрешения
  • Примером такого инструмента является WebPack. Он разрешит все эти инструкции импорта для вас и вместо этого сгенерирует один файл javascript, который вы можете добавить в свой html-файл

Ответ №2:

 import pd from './node-pandas';
 

Также проверьте, есть ли у вас экспорт по умолчанию в вашем node-pandas или нет.
Если в этом случае нет экспорта по умолчанию, вы должны использовать

 import { moduleName } from './node-pandas';
 

Здесь имя модуля будет точно таким же именем, с помощью которого оно экспортируется, и для нескольких
импортируемых файлов вы должны разделять их с помощью запятой

Надеюсь, это решит ваш запрос

Комментарии:

1. Это не работает. Я создал проект с помощью Visual Studio и установил пакет с помощью npm. Поэтому я понятия не имею, существует ли экспорт по умолчанию с помощью node-pandas..

Ответ №3:

 const pd = require("node-pandas")
 

Использование ключевого слова require вместо import может работать, поскольку import зависит от es6 и es7
, с другой стороны, require поддерживается обычным js, начиная с проектов узлов

Комментарии:

1. Я получаю qnother ошибку. functions.js:2 Неперехваченная ошибка ссылки: требование не определено в functions.js:2

Ответ №4:

Вам необходимо указать относительный путь к модулю, например ‘assets / node-pandas / dist / node-pandas’

Ответ №5:

 import pd from 'node-pandas';
 

## Здесь модуль node-pandas находится в каком-то корневом каталоге ##

Я советую использовать ./ или ../ перед именем вашего модуля, предоставленной информации недостаточно для предоставления решения