npm 如何在使用Express Node JS时从Node_Modules导入包

daupos2t  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(201)

导入包时出现此错误:

未捕获的TypeError:未能解析模块说明符“axios”。相对引用必须以“/"、“./"或“../"开头。

当添加”./“,“../“时出现此错误

GET http://localhost:8080/js/axios net::ERR_ABORTED 404(Not Found)
package.json

{
  "type": "module",
  "name": "fives",
  "version": "1.0.0",
  "description": "game",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./app.js"
  },
  "author": "ayah alrifai",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-es2015": "^6.0.15",
    "rimraf": "^3.0.2"
  },
  "dependencies": {
    "axios": "^0.19.2",
    "express": "^4.17.1",
    "socket.io": "^2.3.0",
    "socket.io-client": "^2.3.0"
  }
}

字符串
app.js

import http from "http";
import express from "express";
import io from "socket.io-client";
import path from 'path';

const app=express();
const port="8080";

app.use('/image', express.static('./public/img'));
app.use('/css', express.static('./public/css'));
app.use('/js', express.static('./js'));

app.get('/wait', (req, res)=> {
    res.sendFile(path.join(path.resolve()+'/html/await.html'));
});

app.get('/play', (req, res)=> {
    res.sendFile(path.join(path.resolve()+'/html/play.html'));
});

app.listen(port);


wait.js

import {getWaitedPlayers,createUser,deleteUser,isSelected,action} from "./fivesApi.js";
//code


fivesApi.js

import axios from "axios";
//code


.
├── html
│   ├── wait.html
│   └── play.html
├── app.js
├── js
│   ├── wait.js
│   ├── fivesApi.js
│   └── play.js
├── node_modules
├── package.json
├── package-lock.json
└── public
    ├── css
    │   └── fives.css
    └── img
        ├── 2.png
        ├── 5.png
        └── ayah.png

4sup72z8

4sup72z81#

花了2个小时,终于找到了解决办法,你需要做的第一件事是

npm i parcel-bundler -D

字符串
然后package.json添加以下两行代码

"scripts": {
"dev": "parcel index.html",
"build": "parcel build index.html"
}


最后npm run dev。
如果你仍然有麻烦,please open this链接它只是节省了我这么多的时间。

xlpyo6sf

xlpyo6sf2#

这对我在一个(有点)类似的情况下工作。张贴的情况下,它帮助别人。我觉得有一个更好的方法,但它逃脱我现在。
上下文:使用express.js服务器来提供位于子文件夹中的整个客户端站点,并通过客户端JS模块中的esm连接 socket.io客户端。
1.在express服务器中,定义node_modules目录的路径:
const_ROOT = dirname(fileURLToPath(import.Meta.url)); app.use('/node_modules',express.static(join(node_ROOT,“node_modules”);
1.在客户端模块中,提供与文件系统中显示的完全相同的显式路径名:
从“/node_modules/socket.io/client-dist/socket.io.esm.min.js“导入{ io };
1.当然,要确保第二个部分在js模块中,所以脚本导入看起来像这样:

相关问题