Node.js 如何编写可供NodeJS使用的ES6类\模块&;奥雷利亚

Node.js 如何编写可供NodeJS使用的ES6类\模块&;奥雷利亚,node.js,ecmascript-6,aurelia,es6-module-loader,Node.js,Ecmascript 6,Aurelia,Es6 Module Loader,我试图在我的nodeJS后端和Aurelia前端之间共享一些简单的元数据类。我可以从我的节点(v4.3)过程中要求并使用以下内容: 但在经过典型的Aurelia前端构建处理后,无法在浏览器中加载: Error: Cannot read property 'exports' of undefined 如何使用node和Aurelia之间可以共享的类构造模块?在这种情况下,您最好使用ES6作为基础,然后使用编译器(babel或您正在使用的任何编译器)以您在浏览器和node.js服务器中期望的格式获

我试图在我的nodeJS后端和Aurelia前端之间共享一些简单的元数据类。我可以从我的节点(v4.3)过程中要求并使用以下内容:

但在经过典型的Aurelia前端构建处理后,无法在浏览器中加载:

Error: Cannot read property 'exports' of undefined

如何使用node和Aurelia之间可以共享的类构造模块?

在这种情况下,您最好使用ES6作为基础,然后使用编译器(babel或您正在使用的任何编译器)以您在浏览器和node.js服务器中期望的格式获取模块

common.js格式是node.js中最常用的格式,所有这些格式都适合您的Aurelia应用程序。您的最佳选择可能是将这两个输出(像task一样)编译成commonjs和amd


然后,您可以在浏览器中以amd为目标,在服务器端以commonjs为目标。

在这种情况下,您最好使用ES6作为基础,然后使用编译器(babel或您正在使用的任何编译器)以您在浏览器和node.js服务器中期望的格式获取模块

common.js格式是node.js中最常用的格式,所有这些格式都适合您的Aurelia应用程序。您的最佳选择可能是将这两个输出(像task一样)编译成commonjs和amd


然后你可以在浏览器中以amd为目标,在服务器端以commonjs为目标。

我想回答一下我是如何做到这一点的。由于我的服务器端节点代码目前未由gulp处理,因此我创建了一个与节点v4.X直接兼容的共享ES6类:

"use strict";

class SharedMetadata {

    constructor() {
        this.myOptions = ["Democrat", "Republican", "Other"];
   }
}

exports.SharedMetadata = SharedMetadata;
此类可从如下节点使用:

var SharedMetadata = require('../shared/SharedMetadata').SharedMetadata;

var sharedMetadata = new SharedMetadata();
对于前端,此文件由正常的Aurelia build\Transfile步骤处理,但该文件的exports语句将出错

因此,我添加了另一个仅在“共享”文件上运行的gulp构建步骤,该步骤位于修复错误并执行“正确”导出的transfile步骤之后:

这将用以下内容替换exports语句:

_export('SharedMetadata ', SharedMetadata );

然后,该类可以像任何“普通”的Aurelia前端类一样使用。

我想回答一下我是如何让它工作的。由于我的服务器端节点代码目前未由gulp处理,因此我创建了一个与节点v4.X直接兼容的共享ES6类:

"use strict";

class SharedMetadata {

    constructor() {
        this.myOptions = ["Democrat", "Republican", "Other"];
   }
}

exports.SharedMetadata = SharedMetadata;
此类可从如下节点使用:

var SharedMetadata = require('../shared/SharedMetadata').SharedMetadata;

var sharedMetadata = new SharedMetadata();
对于前端,此文件由正常的Aurelia build\Transfile步骤处理,但该文件的exports语句将出错

因此,我添加了另一个仅在“共享”文件上运行的gulp构建步骤,该步骤位于修复错误并执行“正确”导出的transfile步骤之后:

这将用以下内容替换exports语句:

_export('SharedMetadata ', SharedMetadata );
然后该类可以像任何“普通”的Aurelia前端类一样使用