Tsconfig 和 outDir 问题
Tsconfig and outDir issue
我在 tsconfig.json 中的 outDir 有问题。
我有以下 tsconfig 文件:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "dist",
"outFile": "App.js"
},
"exclude": [
"node_modules",
"local_typings"
]
}
文件被编译为 App.js,但不在我指定的目录 (dist) 中,而是在 tsconfig 文件所在的目录中。有人找到解决这个问题的方法吗?
其实我已经找到问题所在了。我认为这很有趣:它足以在 outFile
中指定文件路径和文件名,而无需使用 outDir
。所以,在这种情况下,这将是:
"outFile":"dist/App.js"
玩得开心!
一个或多个文件使用 "outDir":"./dist"
不幸的是,TypeScript(至少从 3.3 版开始)不能同时支持 outDir
和 outFile
。
我也希望保持我的源目录中没有中间构建文件,同时仍然使用 TypeScript 将我的代码捆绑到一个文件中,而不是需要 shell 输出到第 3 方实用程序,例如 webpack, parcel 或 rollup,然后将其所有输出组合到一个文件中,但遗憾的是,(目前)不是这样。
(但是,要在不同的目录中简单地生成捆绑输出,是的,outFile: "subdir/bundle.js"
就可以了。)
致所有寻找从模块而不是 module/dist/Anything
导入的方法的人
我找到了一个相当简单的解决方案
首先,我的文件夹结构看起来像这样
- project
|- package.json
|- app
||- package.json
||- ...
|- api
||- package.json
||- ...
|- shared
||- package.json
||- tsconfig.json
||- index.ts
||- src
|||- MySharedResource.ts
|||- MySharedSomething.ts
...
(shared是一个npm包,本地安装在api和app中)
我希望能够使用简单的方式从共享中导入内容
import { MySharedResource } from "shared";
这样做的方法是从 MySharedResource.ts
和 MySharedSomething.ts
导出每个需要的组件
export interface MySharedResource {
...
}
然后像这样从 index.ts
导出它:
export * from "./src/MySharedResource";
export * from "./src/MySharedSomething";
重要提示
/shared 中的 tsconfig.json
应该将 outDir 选项设置为 ./dist
(例如),以便 index.ts
被编译为/shared/dist/index.js
和所有其他内容都被编译成 /shared/dist/src。
此外,在您的 package.json
集合中:
"main":"dist/index.js"
注释 1
您可以在每个文件中导出多个内容,但如果您希望像这样导入
import { Thing } from 'shared/Thing';
然后您需要在 /shared 中的 index.ts
旁边有另一个文件(在本例中为 Thing.ts
),其中包含以下内容:
export * from "./src/Task";
注2
你也可以这样做
export * as Thing from "./src/Thing";
我在 tsconfig.json 中的 outDir 有问题。
我有以下 tsconfig 文件:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "dist",
"outFile": "App.js"
},
"exclude": [
"node_modules",
"local_typings"
]
}
文件被编译为 App.js,但不在我指定的目录 (dist) 中,而是在 tsconfig 文件所在的目录中。有人找到解决这个问题的方法吗?
其实我已经找到问题所在了。我认为这很有趣:它足以在 outFile
中指定文件路径和文件名,而无需使用 outDir
。所以,在这种情况下,这将是:
"outFile":"dist/App.js"
玩得开心!
一个或多个文件使用 "outDir":"./dist"
不幸的是,TypeScript(至少从 3.3 版开始)不能同时支持 outDir
和 outFile
。
我也希望保持我的源目录中没有中间构建文件,同时仍然使用 TypeScript 将我的代码捆绑到一个文件中,而不是需要 shell 输出到第 3 方实用程序,例如 webpack, parcel 或 rollup,然后将其所有输出组合到一个文件中,但遗憾的是,(目前)不是这样。
(但是,要在不同的目录中简单地生成捆绑输出,是的,outFile: "subdir/bundle.js"
就可以了。)
致所有寻找从模块而不是 module/dist/Anything
导入的方法的人我找到了一个相当简单的解决方案
首先,我的文件夹结构看起来像这样
- project
|- package.json
|- app
||- package.json
||- ...
|- api
||- package.json
||- ...
|- shared
||- package.json
||- tsconfig.json
||- index.ts
||- src
|||- MySharedResource.ts
|||- MySharedSomething.ts
...
(shared是一个npm包,本地安装在api和app中)
我希望能够使用简单的方式从共享中导入内容
import { MySharedResource } from "shared";
这样做的方法是从 MySharedResource.ts
和 MySharedSomething.ts
export interface MySharedResource {
...
}
然后像这样从 index.ts
导出它:
export * from "./src/MySharedResource";
export * from "./src/MySharedSomething";
重要提示
/shared 中的 tsconfig.json
应该将 outDir 选项设置为 ./dist
(例如),以便 index.ts
被编译为/shared/dist/index.js
和所有其他内容都被编译成 /shared/dist/src。
此外,在您的 package.json
集合中:
"main":"dist/index.js"
注释 1
您可以在每个文件中导出多个内容,但如果您希望像这样导入
import { Thing } from 'shared/Thing';
然后您需要在 /shared 中的 index.ts
旁边有另一个文件(在本例中为 Thing.ts
),其中包含以下内容:
export * from "./src/Task";
注2
你也可以这样做
export * as Thing from "./src/Thing";