ksh*_*ine 15 typescript tsconfig
我有一个src包含源代码和单元测试的目录,以及一个test包含单独速度测试的目录。
当我使用 构建项目时tsc,我得到如下目录结构:
dist/
src/
index.js
...
test/
speed-test.js
Run Code Online (Sandbox Code Playgroud)
然而,我更喜欢将“平面”输出发送到我的dist目录,如下所示:
dist/
index.js
...
speed-test.js
...
Run Code Online (Sandbox Code Playgroud)
如果我speed-test.ts从test目录中删除,tsc则不会将src目录添加到dist. 仅当需要(或者至少当tsc决定需要时)来区分编译代码的源时,才会添加额外的目录结构。
我确信这有时对于避免文件名冲突非常有用,但在这种情况下这对我来说并不重要,而且我不想得到这个额外的“帮助”。
这是我的tsconfig.json:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"outDir": "./dist",
"noImplicitAny": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noImplicitReturns": true,
"moduleResolution": "node",
"esModuleInterop": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加"rootDirs"的选项["src", "test"],但这没有帮助。
无论如何,我有办法获得我正在寻找的输出结构吗?
for*_*d04 12
outDir?\n\n如果我
\nspeed-test.ts从test目录中删除,tsc则不会将src目录添加到dist.
TypeScript 确定一个包含所有源文件的父文件夹。该文件夹由编译器设置或rootDir自动计算。tsconfig.json
例如,如果您包含./test/speed-test.ts在编译中(./=项目根目录),它从 导入其他源文件./src,则其父文件夹将为./,编译后的版本将具有路径<outDir>/test/speed-test.js。
我们需要两件事:1.) TS 项目参考文献2.) rootDirs.
项目引用将创建独立的子项目,每个子项目都有自己的rootDir配置。这有几个优点,例如提高编译时性能。我们可以outDir更灵活地构造输出文件夹( )。
rootDirs将告诉编译器在编译过程中src和被合并到一个文件夹中。test现在我们可以编写导入路径,这些路径由编译器验证,就好像它们形成一个文件夹一样。考虑./test/speed-test.ts需求./src/main.ts- 然后您可以import使用现有的文件夹结构编写以下内容:
// ./test/inside speed-test.ts\nimport {something} from "./main" // main.ts is still inside "./src"\nRun Code Online (Sandbox Code Playgroud)\n注意:TypeScript不会重写导入路径,rootDirs仅影响输入类型验证。
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.test.ts\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.ts\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tsconfig.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 speedtest.ts\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tsconfig.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tsconfig-base.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tsconfig.json\nRun Code Online (Sandbox Code Playgroud)\n./src/main.ts:
export const foo = "foo"\nRun Code Online (Sandbox Code Playgroud)\n./src/tsconfig.json:
{\n "extends": "../tsconfig-base.json",\n "compilerOptions": {\n "outDir": "../dist",\n "composite": true, // needed for references sub-projects\n "rootDir": ".",\n "tsBuildInfoFile": "../dist/srcbuildinfo"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n./test/speedtest.ts:
import { foo } from "./main"; // important(!): pretend, `src/main` is same folder\nconsole.log(foo);\n// ... do performance tests ...\nRun Code Online (Sandbox Code Playgroud)\n./test/tsconfig.json:
{\n "extends": "../tsconfig-base.json",\n "compilerOptions": {\n "outDir": "../dist",\n "rootDir": ".",\n "composite": true, \n "tsBuildInfoFile": "../dist/testbuildinfo",\n "rootDirs": ["../src", "../test"] // important (!)\n },\n "references": [\n {\n "path": "../src" // test project depends on src\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n./tsconfig.json:
{\n "files": [], // this root tsconfig just exists to compose sub-projects\n "references": [\n {\n "path": "./src"\n },\n {\n "path": "./test"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\ntsconfig-base.json包含所有自己的配置值。编译tsc -b -v会将所有文件放置在./dist与源中指定的相同导入路径下:
dist\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.d.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.test.d.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.test.js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 speedtest.d.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 speedtest.js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\nRun Code Online (Sandbox Code Playgroud)\n最后,如果您需要有关项目参考的更多信息 - 这是另一个代码示例。
\n| 归档时间: |
|
| 查看次数: |
7779 次 |
| 最近记录: |