1

我在为我的 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
};

因此,我希望能够启动我的节点服务器来测试我的代码,而无需进行代码转换(我只会在需要我的应用程序的生产构建的情况下这样做)。
我不知道我到底是怎么做到的。我将不胜感激任何帮助或某种手册的链接。

4

1 回答 1

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
    };
};

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

于 2019-04-21T23:16:50.473 回答