`импорт приложения из" ./app "` не работает, но должен работать - PullRequest
0 голосов
/ 19 марта 2020

Цель

Я хочу импортировать приложение из app.js в init.js.

Задача

Для меня явное написание расширения файла работает, но без него не работает.

  • "./app.js" работает 101
  • "./app" не работает ?

Но учебник, которому я следую, имеет "./app" работает. Так почему же это не работает для меня?

Единственное, что я сделал по-другому, - это добавление "type": "module" внутри package.json и имя .babelrc к babel.config.json из-за обновленного использования Babel Node.

Версии

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

Поиск

Возможно эта ссылка связана?

1 Ответ

0 голосов
/ 19 марта 2020

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

babel-node использует @babel/register для внутреннего использования. И @babel/register не поддерживает компиляцию собственных модулей Node.js ES на лету, поскольку в настоящее время нет стабильного API для перехвата загрузки модулей ES.

Итак, в настоящее время нет возможности использовать оба из них, @babel/register и ES modules. (type: module заставит ваш nodejs обрабатывать каждый js файл как ES module)

...