2016-02-12 24 views
1

我試圖在我的nodeJS後端和Aurelia前端之間共享一些簡單的元數據類。我可以要求並使用從我的節點以下(V4.3)過程:如何編寫可以由NodeJS和Aurelia使用的ES6 class module

"use strict"; 

class PersonMetadata { 

    constructor() { 
     this.relation = ["Spouse/partner", "Child", "Parent", "Other"]; 
    } 
} 

module.exports.PersonMetadata = PersonMetadata; 

但它未能在瀏覽器中裝入由典型奧裏利亞前端處理後建立與:

Error: Cannot read property 'exports' of undefined 

如何構建一個可以在節點& Aurelia之間共享的類的模塊?

回答

0

以爲我會回覆我如何得到這個工作。由於我的服務器端節點的代碼目前不得到由一飲而盡處理我創建的共享ES6類,它是與節點V4.X直接兼容:

"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 \ transpile步驟處理,但該文件將與導出語句發生錯誤。

所以我補充說,只運行在「共享」文件另一個一飲而盡生成步驟的transpile一步,修復了錯誤,並做了「正確的」出口後:

gulp.task('transform-shared', function() { 
    return gulp.src(paths.outputShared + '**/*.js') 
     .pipe(replace(/exports\.(.*) = (.*);/g, "_export('$1', $2);")) 
     .pipe(gulp.dest(paths.outputShared)); 
}); 

這取代出口報表與:

_export('SharedMetadata ', SharedMetadata); 

然後,該類可以像任何「正常」Aurelia前端類一樣使用。

0

在這種情況下,最好的辦法就是使用ES6作爲基礎,然後使用編譯器(babel或您正在使用的任何一種)以預期的格式在瀏覽器和node.js服務器中獲取模塊。

common.js格式在node.js中最常用,所有格式都適合您的Aurelia應用程序。你最好的選擇可能是把兩者都編譯出來(比如this這個任務),把commonjs和amd都編譯出來。

然後,您可以在您的瀏覽器和服務器端的commonjs目標amd。

相關問題