2016-03-10 84 views
0

如何在Angular 2中將模塊導入爲模塊?Angular 2系統配置路徑導入自定義Javascript模塊

現在在我的系統配置,我有:

System.config({ 
    paths: { 
    lodash: '../../node_modules/lodash/index.js', 
    constants: 'app/constants.js' 
}, 

我有一個文件constants.js是:

import {Injectable} from 'angular2/core'; 

@Injectable() 
export class Constants{ 
    api_dir: string; 

    constructor(){ 
     var prod = false; 

     if (prod){ 
      this.root_dir = 'http://google.com/' 
     } else{ 
      this.root_dir = 'http://localhost/' 
     } 
     this.api_dir = this.root_dir + 'api/' 
    } 
    } 

在我的組成部分之一,我有:

import {Constants} from 'constants'; 

這給了我錯誤:

Cannot find module 'constants'

如何將JavaScript文件轉換爲模塊,以便始終可以導入它而不會給出相對路徑?

回答

1

如果你使用的打字稿,你必須首先聲明你的模塊中的.d.ts文件。我想你得到的錯誤是編譯器,而不是運行時錯誤。

// ./constants.d.ts 
declare module "constants" { 
    // ... export whatever 
    export interface IConstant { 
    root_dir: string; 
    api_dir: string; 
    } 
} 

否則您的系統配置看起來不錯。如果你想避免在任何地方寫文件擴展名,你可以使用defaultJSExtensions = true配置選項。

0

我認爲你應該使用明確的SystemJS API來註冊你的模塊。類似的東西,在你的app/constants.js文件:

System.register([], true, function(require, exports, module) { 
    exports.Constants = {}; 
}); 
+0

這將假設一個'register'輸出格式不適合編寫模塊,因爲它應該是loader/bundler不可知的。 – Ludohen