没有模块加载器的打字稿?

时间:2016-10-17 10:51:26

标签: typescript

我遇到了一个使用aspx页面的旧软件。 我有一些控件(ascx)几乎可以作为一个小的单页应用程序工作(例如,一个控件,让您注册一个时事通讯,或一个控件,让用户自定义新闻源)。 (我知道......它不是真正的SPA ......)

我开始在这个小型微项目中使用VUE.js。我设法使用纯JavaScript完成所有工作。

现在我想使用typescript而不是JavaScript。

我遇到的问题:当我创建我的打字稿并引用某些模块(如VUE或我自己的模块)时,它总是在生成的js文件中写入一些" require "命令(转换为ES5)或某些导入命令(如果已转换为ES6)。

据我所知,这些命令应该由服务器上的某些模块加载器使用。但我没有Node.Js服务器,也没有Javascript构建基础架构。有没有办法告诉打字稿只是忽略这些命令?然后,我将手动引用所需的JS-genereated文件,其中的模块不包含在ascx-control中。

3 个答案:

答案 0 :(得分:13)

tsconfig.json module媒体资源应为none

{
    "compilerOptions": {
        "module": "none",
    }
}

现在不再有amdsystem代码了。现在,您无法再使用importexport语句了。

如果没有这个,TypeScript不知道脚本的顺序,你可以有Js未定义的错误。

要解决此问题,只需添加tripple slash directive代替import语句

即可

现在TypeScript以正确的顺序编译所有脚本 也请使用outFile代替out,因为已弃用。

答案 1 :(得分:4)

你可以。您只需配置tsc即可在没有模块加载器语句的情况下输出代码。

例如,所有代码都放在一个大文件中。

{
    "compilerOptions": {
        "target": "es5",
        "outFile": "www/js/bundle.js",
        "sourceMap": true,
        "declaration": true,
        "removeComments": true,
        "sourceRoot": ""
    }
}

这可能会限制您对ES6导入语句的使用。您可能必须使用typescript定义的名称空间

答案 2 :(得分:0)

我有一个类似的情况,旧的aspx系统,我想使用ts-> js transpilation,然后进行system.web.optimization捆绑。

我的具体问题与this SO question有关,即以键入方式使用moment.js,而避免像

那样生成输出
Object.defineProperty(exports, "__esModule", {
    value: !0
});
var moment = require("moment");

这将导致js错误,例如

ReferenceError: exports is not defined

我发现添加

"module" : none 

到tsconfig.json以及带有其行的moment.d.ts文件的副本

 export = moment;

已删除或已注释掉。

 {
      "compileOnSave": true,
      "compilerOptions": {
        "noImplicitAny": false,
        "noEmitOnError": true,
        "removeComments": false,
        "sourceMap": true,
        "target": "es5",
        "outDir": "scriptoutput", //,
        "allowSyntheticDefaultImports": true,
        "module": "none"
        //"typeRoots": [ "node_modules/@types/", "node_modules/moment/" ]
      },
      "exclude": [
        "node_modules",
        "wwwroot",
        "scriptoutput"
      ],
      "include": [
        "script/custom-typings/moment.d.ts",
        "**/*"
      ]
    }

工作了,现在我的ts工作正常,无需加载任何模块,并且可以通过打字使打字稿变得很棒!