`从“ ./app”`导入应用程序无效,但应该可以工作

问题描述 投票:0回答:1

目标

我想将应用程序从app.js导入到init.js

问题

对我来说,显式地编写文件扩展名是可行的,但是省略它是不可行的。

  • ["./app.js"起作用✅
  • "./app"不起作用🛑

但是我正在关注的教程可以运行"./app"。那为什么它对我不起作用?

唯一不同的是在"type": "module"中添加package.json并由于更新的Babel节点使用而将.babelrc命名为babel.config.json

版本

node v13.60
"@babel/core": "^7.8.7",
"@babel/node": "^7.8.7",
"express": "^4.17.1"

错误消息

Error: Cannot find module /Users/leochoo/dev/wetube/app imported from /Users/leochoo/dev/wetube/init.js
    at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:100:13)
    at Loader.resolve (internal/modules/esm/loader.js:72:33)
    at Loader.getModuleJob (internal/modules/esm/loader.js:156:40)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)
    at link (internal/modules/esm/module_job.js:41:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}
[nodemon] app crashed - waiting for file changes before starting...

与文件有关

// app.js
const app = express();
...
export default app; //share this to init
// init.js
import app from "./app.js";
// babel.config.json
{
  "presets": ["@babel/preset-env"]
}
// package.json
{
  "name": "wetube",
  "version": "1.0.0",
  "author": "Leonard Choo",
  "dependencies": {
    "@babel/core": "^7.8.7",
    "@babel/node": "^7.8.7",
    "body-parser": "^1.19.0",
    "cookie-parser": "^1.4.5",
    "express": "^4.17.1",
    "helmet": "^3.21.3",
    "morgan": "^1.9.1"
  },
  "scripts": {
    "start": "nodemon --exec babel-node init.js --delay 2"
  },
  "devDependencies": {
    "@babel/preset-env": "^7.8.7",
    "nodemon": "^2.0.2"
  },
  "type": "module"
}

屏幕截图

enter image description here

已搜寻

也许this link与之相关?

javascript node.js express babel
1个回答
0
投票

https://babeljs.io/docs/en/babel-register

babel-node在内部使用@babel/register@babel/register不支持即时编译本机Node.js ES模块,因为当前没有稳定的API来拦截ES模块的加载。

因此,目前无法同时使用@babel/registerES modules。(type: module将使您的nodejs将每个js文件都视为ES module

© www.soinside.com 2019 - 2024. All rights reserved.