我有一系列的Typescript项目(每个都是一个实际的可编译目标,有自己的tsconfig.json)。它们是一个代码存储库中的兄弟目录,如下所示:
myrepo
--/common
--/project1
--/project2
为了在project1
和project2
之间共享代码,我将一些共享代码分解为common
。我想允许project1
和project2
代码从common
导入类,但不能从彼此导入类(并且common
不应该从任何一个导入类另外两个)。
理想情况下,project1
中的代码可能如下所示:
import {CommonClass} from 'common/commonclass';
通过将其放入project1
的tsconfig.json中,我找到了一种允许导入正常工作的方法:
"baseUrl":".",
"paths":{
"*":["*","../*"]
}
但是,我还没有找到一种方法来限制哪些其他子项目可以成为import
的主题。我尝试过使用rootDirs
,希望它会以rootDir
的方式限制允许的源文件,但事实上并非如此。
如何将每个项目中可导入的代码列入白名单?或者是否有一些更好的方法来构建我不知道的Typescript中的子项目?
答案 0 :(得分:2)
我还必须处理类似的结构,并且找不到理想的方法
我设法得到的最好的是lib
和project1
中的project2
目录,其中包含已编译的common
以及定义文件。
我使用gulp将common
项目构建到不同的projectX/lib
目录中:
gulp.task("common-project1", function () {
var tsProject = ts.createProject("common/tsconfig.json");
return tsProject.src("common/**/*.ts")
.pipe(tsProject())
.pipe(gulp.dest("project1/lib/common"));
});
它不是最好的解决方案,因为它要求您每次更改common
来源时都要运行此gulp任务,但我发现它并非经常发生一旦common
足够稳定。
答案 1 :(得分:0)
您可以在tsconfig.json中使用noResolve
编译器选项,请参阅Compiler Options。
例如:在project2 / tsconfig.json中,您可以将include
设置为true,并在// project2/tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noResolve": true
},
"include": [
"../common/**/*",
"**/*"
]
}
// project2/ProjectUtil2.ts
import ProjectUtil1 from "../project1/ProjectUtil1"; // TypeScript error
import StringUtil from "../common/StringUtil";
export class ProjectUtil2 {
static formatOutput(text: string) {
return "Project 2: " + ProjectUtil1.formatOutput(text);
}
}
export default ProjectUtil2;
使用上述设置,TypeScript会警告您错误导入ProjectUtil1:
class Point(object):
def __repr__(self):
return "(" + str(self.x) + "," + str(self.y) + ")"
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, point):
return Point(self.x + point.x, self.y + point.y)
def __sub__(self, point):
return Point(self.x - point.x, self.y - point.y)
def __mul__(self, num):
return Point(num * self.x, num * self.y)
def __rmul__(self, num):
return self.__mul__(num)
def length(self):
return self.x ** 2 + self.y ** 2
x = Point(1, 2)
y = Point(1, 3)
print(x + y)
print(y + x)
print(x - y)
print(y - x)
print(y * 3)
print(3 * y)