带有打字稿外部commonjs模块的Webpack

时间:2016-01-07 14:29:29

标签: typescript webpack

为了让我的代码能够正常工作,我需要重复require('./rolesService')中的rolesView.ts子句,或取消注释console.log语句。如果我没有这些行,webpack不会在bundle中包含引用的rolesService.ts,从而导致缺少RolesServiceProvider错误。我想我知道为什么,因为rs并没有真正使用,除了类型引用一旦被转换为es5就消失了,所以webpack必须优化导入。有没有办法不必重复两次require('./ rolesService')。

rolesView.ts:

"use strict";

import angular = require('angular');

import rs = require('./rolesService');

require('./rolesService');

//console.log( rs);

class RolesViewController {
    static $inject = ['RolesService']
    constructor(private rolesService: rs.IRolesService) {
        rolesService.getRoles();
    }
}

angular.module('epsr').component('rolesView', {
    template: require('./rolesView.html'),
    controller: RolesViewController
});

rolesService.ts:

'use strict';

import angular = require('angular');

export interface IRole {
    id: string;
    name: string;
}

export interface IRolesService {
    getRoles(): ng.IPromise<IRole[]>;
}

class RolesService implements RolesService {
    static $inject = ['$http'];
    constructor(private $http: ng.IHttpService) {
    }

    getRoles(): ng.IPromise<IRole[]> {
        return this.$http.get('api/roles');
    }
}

angular.module('epsr').service('RolesService', RolesService);

1 个答案:

答案 0 :(得分:3)

  

我想我知道为什么,因为rs并没有真正使用,除了类型引用一旦被转换为es5就会消失,所以webpack必须优化导入。

你是对的。如果仅使用类型信息,则TypeScript将删除导入。

可用的&#34;修复&#34;是:

  1. 你有什么:require('./rolesService');
  2. &#34;使用&#34;导入:rs;
  3. FWIW,Angular2似乎用实际使用导入的@Inject指令来解决这个问题。