Поддерживает ли NodeJS загрузку модуля в стиле "Импорт"?

Я смотрю на проект NodeJS, который загружается с GitHub. У него есть основной файл, server.js, который использует синтаксис импорта модуля ES6 следующим образом:

import express from 'express';
import bodyParser from 'body-parser';
import fs from 'fs';
import { search } from './lib/words';

У меня установлена ​​NodeJS версии 4.6.0, которая довольно старая, и я не думаю, что она поддерживает этот синтаксис. Вместо этого это должно быть как:

var express = require(express)
var bodyParser = require('body-parser')
...

Однако я могу правильно запустить этот проект без ошибок, что, как мне кажется, показывает, что NodeJS поддерживает этот синтаксис, но документация NodeJS никогда не определяет такой синтаксис модуля. По какой причине мы можем использовать это здесь? Спасибо за помощь.

1 ответ

Решение

Когда ты бежишь npm start, скрипт запуска в package.json это означает, что start.js исполняется.

start.js использования babel-register перенести новый синтаксис ES6 (включая импорт) в простой ES5 JavaScript, который Node понимает на лету. .babelrc показывает, что es2015 используется пресет, который преобразует код ES2015 (ES6) в обычный ES5 JS.

Конкретный трансформатор, который важен для вас transform-es2015-modules-commonjs, который преобразует import в require как и ожидалось.

Другие вопросы по тегам