Я не могу заставить опциональных операторов цепочки Babel работать с ошибками - PullRequest
0 голосов
/ 02 ноября 2019

Я новичок в программировании в бэкэнд-среде, и сейчас я использую glitch.com для написания своего кода. У меня есть проект , где я экспериментирую с использованием passport для регистрации пользователей и входа в систему. Я реализовал стратегию github для паспорта, но я получаю сообщение об ошибке, пытаясь записать информацию о пользователев БД. По сути, передача email: profile.email[0].value || 'no public email' в качестве одного из вариантов дает мне нулевую ссылку, когда я пытаюсь войти в систему самостоятельно. При анализе объекта profile я обнаружил, что в нем отсутствует поле email, поэтому я хочу сделать что-то вроде email: profile.email[0]?.value || 'no public email'

Я пару дней пытался заставить это работатьс помощью "@babel/plugin-proposal-optional-chaining": "^7.6.0" я пока пытаюсь избегать команд npm, потому что немного сложнее следить за тем, что происходит, поэтому я пытаюсь установить то, что мне нужно, в packages.json (хотя я пытался npmКоманды ранее и это не сработало).

в настоящее время у меня есть следующие в моих зависимостях (я также пытался переместить вещи в devDependencies):

"babel-cli": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"babel-register": "^6.26.0",
"@babel/plugin-proposal-optional-chaining": "^7.6.0",
"@babel/core": "^7.6.0"

Я такжев packages.json: "babel": {"plugins": [["@babel/core"], ["@babel/plugin-proposal-optional-chaining"]]}, (я тоже пробовал без каких-либо опций)

Это не сработало, поэтому я добавил

require("@babel/core").transform("code", {
  plugins: [["@babel/core"], ["@babel/plugin-proposal-optional-chaining"]]
});

к auth.js файл (файл, в котором я пытаюсь реализовать оператор). Я также попробовал это без плагина @babel/core. Когда это не сработало, я решил попробовать добавить .babelrc со следующим кодом:

{
  "plugins": [["@babel/core"], ["@babel/plugin-proposal-optional-chaining"]]
}

Это не сработало, поэтому я подумал, может быть, мне нужно изменить его на .babelrc.json, и этотоже не работалНа основании документации кажется, что хотя бы одна из этих попыток должна была сработать. Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Изменения должны работать с файлом .babelrc.

{
  "plugins": ["@babelcore", @babel/plugin-proposal-optional-chaining"]
}

Однако вы не запускаете код, передаваемый babel, согласно приведенной ниже команде.

"start": "node server.js --exec babel-node --presets es2015,stage-2"

Этодолжен выглядеть примерно так, как показано ниже.

"scripts": {
    "start": "babel server.js --out-file script-compiled.js && node script-compiled.js"
  }

Здесь я передаю только один файл, который необходимо передать с помощью babel

server.js => script-compiled.js

Вы можете взглянуть на Компиляция каталогов из документации .

Также похоже, что вы зависите от какого-то движка шаблонов. Возможно, вам придется убедиться, что вы используете абсолютные пути для шаблонов или скопируете шаблоны в место, доступное для перенесенной папки сценариев

0 голосов
/ 06 ноября 2019

Итак, я наконец-то заработал. Нет необходимости самостоятельно компилировать файлы, и, честно говоря, мне все равно было трудно заставить его работать таким образом. Итак, вот список вещей, которые я обнаружил, пытаясь заставить это работать.

Сценарий babel server.js --out-file script-compiled.js && node script-compiled.js start хорош для предварительной компиляции обслуживаемого файла основного сценария. Так как были другие .js файлы, от которых зависело server.js;однако мне было трудно заставить это работать. Вместо оригинальной строки у меня было babel-node server.js достаточно. Поскольку он компилируется во время выполнения, а не создает выходной файл, мне не нужно беспокоиться о координации его зависимостей, которые также необходимо компилировать, все они компилируются сразу во время выполнения.

Есть две причины, по которымне работал: 1: я опустил зависимость @babel/node, и 2: в процессе моего исследования выяснил, что сам движок babel ничего не делает, а вместо этого использует плагины для компиляции того, что ему нужно,У меня уже была зависимость @babel/plugin-proposal-optional-chaining, но это было все. По-видимому, существует целая библиотека предустановленных зависимостей под названием preset-env, которая включена в зависимость @babel/preset-env, после включения зависимости мне пришлось включить ее в файл .babelrc, в дополнение к плагину, которым я был на самом делеищу:

{
  "plugins": ["@babel/plugin-proposal-optional-chaining"],
  "presets": ["@babel/env"]
}
...