Как вы делаете, чтобы Babel 7 понимал импорт и экспорт? - PullRequest
0 голосов
/ 19 марта 2020

Я очень стараюсь, чтобы babel-node понимал импорт и экспорт. Я пробовал различные плагины и пресеты Babel, но ни один из них, похоже, не работает, и, что еще хуже, я даже не могу сказать, загружает ли Babel мой .babelr c или нет.

Вот мои настройки barebones с использованием Узел 10.16 :

пакет. json

{
  "name": "jssb",
  "version": "1.0.0",
  "main": "index.js",
  "author": "[redacted]",
  "license": "MIT",
  "private": true,
  "scripts": {
    "whatever": "npx babel-node -- ./whatever"
  },
  "devDependencies": {
    "@babel/cli": "^7.8.4",
    "@babel/core": "^7.8.7",
    "@babel/node": "^7.8.7",
    "@babel/preset-env": "^7.8.7"
  }
}

.babelr c

{
  "presets": ["@babel/preset-env"]
}

независимо (chmod a + x)

#!/usr/bin/env npx babel-node --

import path from 'path';

const main = () => {
  console.log(typeof path);
}

main();

Всякий раз, когда я запускаю whatever, я получаю следующее (сокращенная трассировка стека):

import path from 'path';
       ^^^^

SyntaxError: Unexpected identifier
    at Module._compile (internal/modules/cjs/loader.js:721:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:787:10)

Я пытался запустить whatever четырьмя различными способами, но я получил тот же результат каждый раз:

./whatever
npx babel-node -- ./whatever
npx babel-node --presets @babel/preset-env -- ./whatever
yarn whatever

Почему? Я думал, что preset-env позаботится об импорте и экспорте. Чего мне не хватает?

1 Ответ

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

После разговора о Slack с Логаном Смитом, одним из основных участников Babel, выясняется, что это не сработает, поскольку используемый мной файл не имеет расширения. js.

Обычно узел обрабатывает любой файл, переданный ему, как файл. js. То же самое было в Вавилоне 6 с babel-node.

Но в Вавилоне 7 имена файлов проверяются по списку расширений, и их отсутствие. js не пройдёт эту проверку.

Если Я действительно хочу имя файла без расширения с babel-node в Babel 7, мне придется использовать require() вместо import. Например:

независимо

#!/usr/bin/env npx babel-node --

const { default: answer } = require('./answer');

const main = () => {
  console.log(answer);
}

main();

ответ. js

export default 42;

При выполнении любого из следующих действий:

./whatever
npx babel-node -- ./whatever
npx babel-node --presets @babel/preset-env -- ./whatever
yarn whatever

I получить:

42
...