我遇到了一个使用aspx页面的旧软件。 我有一些控件(ascx)几乎可以作为一个小的单页应用程序工作(例如,一个控件,让您注册一个时事通讯,或一个控件,让用户自定义新闻源)。 (我知道......它不是真正的SPA ......)
我开始在这个小型微项目中使用VUE.js。我设法使用纯JavaScript完成所有工作。
现在我想使用typescript而不是JavaScript。
我遇到的问题:当我创建我的打字稿并引用某些模块(如VUE或我自己的模块)时,它总是在生成的js文件中写入一些" require "命令(转换为ES5)或某些导入命令(如果已转换为ES6)。
据我所知,这些命令应该由服务器上的某些模块加载器使用。但我没有Node.Js服务器,也没有Javascript构建基础架构。有没有办法告诉打字稿只是忽略这些命令?然后,我将手动引用所需的JS-genereated文件,其中的模块不包含在ascx-control中。
答案 0 :(得分:13)
在tsconfig.json
module
媒体资源应为none
{
"compilerOptions": {
"module": "none",
}
}
现在不再有amd
或system
代码了。现在,您无法再使用import
和export
语句了。
如果没有这个,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工作正常,无需加载任何模块,并且可以通过打字使打字稿变得很棒!