其他文件中的环境模块适用于tsc而不适用于webpack + ts-loader?

时间:2017-04-29 05:24:15

标签: typescript webpack ts-loader

我正在玩TypeScript中的环境模块,使用MailApp的一个小玩具示例,这是Google Apps Script (see here)中的全局模块。我正在做的只是在VS代码中编写代码,用webpack编译代码,然后将其作为ES5代码复制到Apps Script控制台中运行。

我的问题:对于下面的代码,当我将环境模块声明移到.d.ts文件并使用triple-slash指令引用它时,TSC和VS代码都是认识到这一点但是,webpack + ts-loader(awesome-typescript-loader有同样的问题)总是显示错误:

Module not found: Error: Can't resolve 'MailApp'

我在这里错过了什么吗?

我的声明文件:root / src / AppsScriptTypes.d.ts

declare module 'MailApp' {
  export interface EmailOptions {
    bcc?: string;
    cc?: string;
    htmlBody?: string;
    name?: string;
    noReply?: boolean;
    replyTo?: string;
  }
  export function sendEmail(
    recipient: string,
    subject: string,
    body: string,
    options?: EmailOptions): void;
 }

我的主文件:root / src / SendMail.ts

/// <reference path="./AppsScriptTypes.d.ts" />
import * as MailApp from 'MailApp';

MailApp.sendEmail(
  'myemail@gmail.com',
  'Sample Email Title',
  'Sample Email Body', {
    noReply: true,
    cc: 'myemail@gmail.com',
  });

我的root / webpack.config.js:

module.exports = {
  entry: './src/SendMail.ts',
  output: {
    filename: 'bundle.js',
    path: __dirname,
  },
  resolve: {
    extensions: ['.ts', '.tsx',],
  },
  module: {
    rules: [
      {
        loader: 'ts-loader',
        test: /\.(t|j)sx?$/,
        exclude: /node_modules|MockMailApp\.js/,
      }
    ]
  },
};

当我不使用三斜杠引用+单独文件并将声明移动到SendMail.ts文件中时,webpack + ts-loader没有错误,但这当然不是优选的:< / p>

declare module MailApp {
  ...
} // this works for webpack when shown like this in SendMail.ts

MailApp.sendEmail(...);
...

我错过了某处的配置吗?我使用的是webpack 2.4.1,TypeScript 2.3,ts-loader 2.0.3。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我不确定它是否会有所帮助,但您可以尝试以下一个

  1. 将“.d.ts”添加到webpack.config.js文件中的resolve.extensions
  2. 在您的AppsScriptTypes.d.ts文件中使用“.ts”扩展名而不是“.d.ts”