NodeJS 是否支持 "Import" 风格的模块加载?

Does NodeJS support "Import" style module loading?

我正在查看从 GitHub 下载的 NodeJS 项目。它有一个主文件 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 文档从未指定这种模块语法。我们可以在这里使用它的原因是什么?谢谢你的帮助。

当您 运行 npm start 时,start script in the package.json is run, meaning that start.js 被执行。

start.js 使用 babel-register to transpile the new ES6 syntax (including the imports) to plain ES5 JavaScript that Node understands on the fly. The .babelrc shows that the es2015 preset 正在使用,它将 ES2015 (ES6) 代码转换为普通的 ES5 JS。

对您来说重要的特定转换器是 transform-es2015-modules-commonjs,它将按预期将 import 转换为 require