Node.js Nodejs中跨多个文件的Typescript内部模块
我一直在浏览StackOverflow帖子和多篇博客帖子,但似乎找不到答案 我正在使用VS代码、nodejs、typescript和gulp。 当我将所有模块控制器代码放入一个文件时,如下所示:Node.js Nodejs中跨多个文件的Typescript内部模块,node.js,typescript,gulp,visual-studio-code,Node.js,Typescript,Gulp,Visual Studio Code,我一直在浏览StackOverflow帖子和多篇博客帖子,但似乎找不到答案 我正在使用VS代码、nodejs、typescript和gulp。 当我将所有模块控制器代码放入一个文件时,如下所示: <controllers.ts> module Controllers { export class Api { get(controllerName:string):IController { } } } module C
<controllers.ts>
module Controllers {
export class Api {
get(controllerName:string):IController {
}
}
}
module Controllers {
export interface IController {
performAction(actionName:string):any;
}
}
module Controllers {
export class ControllerBase implements IController {
performAction(actionName:string):any {
}
}
}
module Controllers {
export class UserController extends ControllerBase {
}
}
export = Controllers;
export class UserController extends Controllers.ControllerBase
import Controllers = require("./controllers");
它不喜欢UserController之前的控制器,但如果我删除该控制器并使其看起来像这样:
<controllers.ts>
module Controllers {
export class Api {
get(controllerName:string):IController {
}
}
}
module Controllers {
export interface IController {
performAction(actionName:string):any;
}
}
module Controllers {
export class ControllerBase implements IController {
performAction(actionName:string):any {
}
}
}
module Controllers {
export class UserController extends ControllerBase {
}
}
export = Controllers;
export class UserController extends Controllers.ControllerBase
import Controllers = require("./controllers");
显然,它将UserController放在不同的模块中
另外,按如下方式导入:
<controllers.ts>
module Controllers {
export class Api {
get(controllerName:string):IController {
}
}
}
module Controllers {
export interface IController {
performAction(actionName:string):any;
}
}
module Controllers {
export class ControllerBase implements IController {
performAction(actionName:string):any {
}
}
}
module Controllers {
export class UserController extends ControllerBase {
}
}
export = Controllers;
export class UserController extends Controllers.ControllerBase
import Controllers = require("./controllers");
似乎也没用。我不知道还能尝试什么。任何帮助都将不胜感激。这似乎不是不可能实现的
Nodejs中跨多个文件的Typescript内部模块
不要。使用带编译器标志的外部模块--module commonjs
:
如果您仍然不相信,这里有更多的原因:当您考虑这样做时,似乎有两个问题
var gulp = require('gulp');
var concat = require('gulp-concat');
var insert = require('gulp-insert');
var ts = require('gulp-typescript');
var del = require('del');
var tsOptions = {
noImplicitAny: true,
target: 'ES5',
module: 'commonjs'
};
gulp.task('clean', function(done) {
del(['./dest'], done);
})
gulp.task('compile-controllers', function() {
return gulp.src(['./src/controllers.ts', './src/*.ts'])
.pipe(concat('controllers.ts'))
.pipe(insert.append('export = Controllers;'))
.pipe(ts(tsOptions))
.js
.pipe(gulp.dest('dest/server'));
});
谢谢你的回复。我看了你的视频,读了你的帖子,但仍然不知道如何实现我想要的。我想定义一个变量/未知数量的控制器,这些控制器都可以扩展ControllerBase。我希望它们生活在不同的文件中,以允许小的重点文件,但它们都生活在同一个模块(“名称空间”)下。这是可以实现的吗?从你的帖子中可以看出--out是我必须采取的方法,但不推荐这样做,因为你不能保证构建顺序,这可能会导致很多问题。这有什么办法吗?