如何为Chrome扩展程序配置tsconfig.json以便创建模块

时间:2018-08-16 17:44:11

标签: typescript google-chrome-extension

我正在用VS Code为Chrome插件编写一些TypeScript。 TS转换为JS的效果很好,但是我的主要.ts文件足够大,我想将一些代码重构到一个单独的模块中。

我创建了一个文件common.ts,并将一些常量和函数移到了上面:

export function doSomething(foo : string): string { ... }

在主.ts文件中,我可以通过限定出口来引用这些出口,例如:

let result = common.doSomething("foo");

当前,我可以使用以下代码导入此代码:

import common = require("./common");

VS Code的自动完成或构建没有问题;但是,当我打开扩展程序时,出现错误:

  

未捕获的ReferenceError:在popup.ts:2上未定义define

这指向生成的JavaScript的这一部分:

define(["require", "exports", "./common"], function (require, exports, common) {

我的tsconfig.json当前为:

{
    "compilerOptions": {
        "target": "es6",
        "module": "amd",
        "sourceMap": true
    }
}

我尝试使用“ commonjs”模块,但我已阅读到浏览器不支持该模块。即使这样,当我尝试时,也会收到类似的错误,未定义“ exports”:

  

Object.defineProperty(exports,“ __esModule”,{value:true});

我也尝试过使用“系统”模块,但是在未定义“系统”的情况下也会发生同样的事情:

  

System.register([“ ./ common”],函数(exports_1,context_1){

最后是“ es2015”,它要求我导入为import * as common from "./common";。此行代码完全在.js文件中复制,Chrome给了我错误:

  

未捕获的SyntaxError:意外令牌*

我还将目标从es6更改为其他各种目标,并尝试导入为import { doSomething } from "./common"

配置tsconfig.json以编写模块的合适方法是什么(nb:我没有在common.ts中使用modulenamespace关键字:这只是一系列导出语句),然后导入该模块,以便我可以清理此代码并在浏览器中使用它?

1 个答案:

答案 0 :(得分:0)

基于some quick research(我自己从未开发过Chrome扩展程序),您需要:

  1. 使用诸如Webpack之类的捆绑软件,该捆绑软件可以将TypeScript支持的"module"输出格式之一转换为单个JavaScript文件,或者

  2. 设置"module": "es2015"并使用HTML页面按照herehere所述将模块加载到Chrome中。