#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 находится в каком-то корневом каталоге ##
Я советую использовать ./ или ../ перед именем вашего модуля, предоставленной информации недостаточно для предоставления решения