如何使用babel-node导入es6模块?

时间:2019-04-21 20:11:53

标签: ecmascript-6 babel-node

为我的node express应用程序编写快速测试时遇到了一些麻烦。问题是:在服务器文件中,我使用es6 import导入我的自定义类。所以有这样一行: import MyClass from 'src/myclass.js';

我的测试脚本如下:

npx babel-node srv/server.js

我得到的错误如下:

Syntax error: Unexpected identifier突出显示导入后的模块名称

那我为什么要这样做呢?我认为在每次需要测试Web应用程序时都无需运行代码转换程序就很好了。

我已经尝试将--experimental-modules放置在测试命令中,不幸的是,它对我不起作用。我的节点版本是:11.14

我的入口点就是这样

import MyClass form 'src/myclass.js';

var myClass = new MyClass();

我的班级文件是这样的

export default MyClass {
 constructor() {
  ...
 }
}

我的babel配置

require('@babel/register')({
    only: [__dirname + '/src', __dirname + '/srv'],
    ignore: [__dirname + 'node_modules'],
    presets: ['@babel/preset-env']
});

var presets = [
    [
        '@babel/preset-env',
        {
            'useBuiltIns': 'entry',
            'corejs': 'core-js@3'
        }
    ]
];

var plugins = [
    [
        'module-resolver',
        {
            'root': ['./src'],
            'alias': {
                'lance': './node_modules/lance-gg/dist'
            }
        }
    ]
];

module.express = {
    presets,
    plugins
};

因此,我希望能够启动我的节点服务器以测试我的代码而无需进行代码转译(只有在需要我的应用程序的生产版本的情况下,我才会这样做)。
我不知道该怎么做。我将不胜感激,也欢迎您链接到某种手册。

1 个答案:

答案 0 :(得分:0)

您好,我不明白为什么,但是要这样重写我的babel配置:

require('@babel/register')({
    only: [__dirname + '/src', __dirname + '/srv'],
    ignore: [__dirname + 'node_modules'],
    presets: ['@babel/preset-env']
});

var presets = [
    [
        '@babel/preset-env',
        {
            'useBuiltIns': 'entry',
            'corejs': 'core-js@3'
        }
    ]
];

var plugins = [
    [
        'module-resolver',
        {
            'root': ['./src'],
            'alias': {
                'lance': './node_modules/lance-gg/dist'
            }
        }
    ]
];

module.exports = function (api) {
    api.cache(false);

    return {
        presets,
        plugins
    };
};

我不会接受我的回答,希望有人能更好地解释为什么我以前的配置不够好,但是我把它留在这里也许对某人有用。