2016-03-10 89 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