我正在使用Visual Studio Code并且有一个相当常见的项目结构:
public static class M2SA : InterviewQuestion
这两个tsconfig文件有不同的设置(例如├── client/
│ ├── tsconfig.json
├── shared/
├── server/
│ ├── tsconfig.json
├── project.json
目标ES5下的那个,client/
目标ES6下的那个。
问题是我希望共享目录包含在两个项目中。我无法使用tsconfig执行此操作,因为server/
选项不允许我包含比tsconfig.json更高的目录中的文件夹,并使用exclude
我必须不断保留列表文件是最新的,因为它不支持globs。
请注意,我可以通过将共享文件夹添加到tsc中来编译,我想要的是Visual Studio Code IDE识别智能感知的共享代码等。
是等待filesGlob的唯一选择吗?
答案 0 :(得分:9)
我在这里回答:tsconfig extension answer
答案的要点:
您可以通过扩展基本tsconfig.json文件来完成此操作:
只是不排除基础tsconfig.json中的目录,打字稿应该能够解决你的打字(使用node_modules / @ types或者typings模块知道这是真的)
例如:
CONFIGS / base.json:
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true
}
}
tsconfig.json:
{
"extends": "./configs/base",
"files": [
"main.ts",
"supplemental.ts"
]
}
tsconfig.nostrictnull.json:
{
"extends": "./tsconfig",
"compilerOptions": {
"strictNullChecks": false
}
}
答案 1 :(得分:4)
对根使用单个tsconfig.json
。然后将其扩展到每个项目(后端tsconfig.server.json
,前端tsconfig.webpack.json
)。
tsconfig.json
include: ['src']
以确保在IDE中对所有文件进行类型检查tsconfig.server.json
exclude: ['src/app']
前端文件tsconfig.webpack.json
exclude: ['src/backend']
后端文件├── src/
│ ├── app/ < Frontend
│ ├── server/ < Backend
│ ├── common/ < Shared
├── tsconfig.json
├── tsconfig.server.json
├── tsconfig.webpack.json
tsconfig.json
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true
},
"include": [
"src"
]
}
tsconfig.server.json
{
"extends": "./tsconfig.json",
"exclude": [
"src/app"
]
}
tsconfig.webpack.json
{
"extends": "./tsconfig.json",
"exclude": [
"src/server"
]
}
答案 2 :(得分:0)
是等待filesGlob的唯一选择吗?
最佳选择:
tsconfig.json
并且仅使用捆绑(使用类似webpack的内容)client
中的文件(webpack将获取对共享的引用)。 这是我在这里使用的工作流程https://github.com/alm-tools/alm(单个tsconfig.json https://github.com/alm-tools/alm/blob/master/src/tsconfig.json)
此工作流程也包含在alm设计文档中:https://basarat.gitbooks.io/alm/content/contributing/
答案 3 :(得分:0)
VSCode的新版本支持Typescript 2,添加此项后,使用include
选项在tsconfig.json中添加了对globs的支持。见http://www.typescriptlang.org/docs/handbook/tsconfig-json.html
答案 4 :(得分:0)
正如其他人所提到的,如果前端和后端具有不同的类型,则现有的答案无法解决问题-几乎在每种情况下,因为前端代码支持dom
而后端代码不支持
拥有最高级别的tsconfig.json
意味着dom
代码会在前端代码中显示为错误(如果dom
是lib),或者dom
代码会显示为允许在后端代码中使用(如果省略了dom
)。
这是一个可行的解决方案:
我们的项目通常是“默认情况下是后端”,带有用于前端代码的特定文件夹。
├── src/
│ ├── frontend/ < Frontend
│ │ ├── `tsconfig.json` (extends frontend framework defaults, eg Svelte)
│ ├── http/ < Backend
│ ├── events/ < Backend
├── tsconfig.json `tsconfig.json` (backend tsconfig)
tsconfig.json
这通常很小。我们使用jest
进行测试,并使用es2019
JS stdlib。
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"outDir": "dist",
"moduleResolution": "node",
"esModuleInterop": true,
"lib": ["es2019"],
"types": ["jest"],
},
"exclude": [
"node_modules",
"public/*",
"src/frontend/*"
],
"include": ["src/**/*"]
}
tsconfig.json
这是针对Svelte的,但在较旧的框架中也可以类似地工作。前端具有不同的类型,因为它支持.svelte
文件和dom
{
"extends": "@tsconfig/svelte/tsconfig.json",
"compilerOptions": {
// Default included above is es2017
"target": "es2019",
},
"lib": ["es2019", "dom"],
}
使汇总使用单独的tsconfig文件:
export default {
input: ...
output: ...
plugins: [
...
typescript({
tsconfig: "src/frontend/tsconfig.json",
sourceMap: isDevelopment,
inlineSources: isDevelopment,
}),
...
],
...
};
答案 5 :(得分:-1)
作为另一个变体,将npm与下次运行绑定
<div class="row">
<div id="middlecolumn" align="center">
<table class="table">
<thead>
<tr>
<th id="tabletext">
<?php echo $lang['send']; ?>
</th>
<th id="tabletext">
<?php echo $lang['receive']; ?>
</th>
<th id="tabletext">
<?php echo $lang['amount']; ?>
</th>
<th id="tabletext">
<?php echo $lang['exchange_id']; ?>
</th>
<th id="tabletext">
<?php echo $lang['status']; ?>
</th>
<th id="tabletext">
<?php echo $lang['date_time']; ?>
</th>
</tr>
</thead>
<tbody>
<?php
$query = $db->query("SELECT * FROM bit_exchanges ORDER BY id DESC LIMIT 5000");
if($query->num_rows>0) {
while($row = $query->fetch_assoc()) {
?>
<tr>
<td id="tabletext"><img src="<?php echo gatewayicon(gatewayinfo($row['gateway_send']," name ")); ?>" width="20px" height="20">
<?php echo gatewayinfo($row['gateway_send'],"name"); ?>
</td>
<td id="tabletext"><img src="<?php echo gatewayicon(gatewayinfo($row['gateway_receive']," name ")); ?>" width="20px" height="20">
<?php echo gatewayinfo($row['gateway_receive'],"name"); ?>
</td>
<td id="tabletext">
<?php echo $row['amount_send']; ?>
<?php echo gatewayinfo($row['gateway_send'],"currency"); ?>
</td>
<td id="tabletext">
<?php echo cropexchangeid($row['exchange_id'],8); ?>
</td>
<td id="tabletext">
<?php
if($row['status'] == "1") {
echo '<span class="label label-warning"><i class="fa fa-clock-o"></i> '.$lang[status_1].'</span>';
} elseif($row['status'] == "2") {
echo '<span class="label label-warning"><i class="fa fa-clock-o"></i> '.$lang[status_2].'</span>';
} elseif($row['status'] == "3") {
echo '<span class="label label-info"><i class="fa fa-clock-o"></i> '.$lang[status_3].'</span>';
} elseif($row['status'] == "4") {
echo '<span class="label label-success"><i class="fa fa-check"></i> '.$lang[status_4].'</span>';
} elseif($row['status'] == "5") {
echo '<span class="label label-danger"><i class="fa fa-times"></i> '.$lang[status_5].'</span>';
} elseif($row['status'] == "6") {
echo '<span class="label label-danger"><i class="fa fa-times"></i> '.$lang[status_6].'</span>';
} elseif($row['status'] == "7") {
echo '<span class="label label-danger"><i class="fa fa-times"></i> '.$lang[status_7].'</span>';
} else {
echo '<span class="label label-default">'.$lang[status_unknown].'</span>';
}
?>
</td>
<td id="tabletext">
<?php echo date("d/m/Y H:i:s",$row['created']) ?>
</td>
</tr>
<?php
}
} else {
echo '<tr><td colspan="5">'.$lang[still_no_exchanges].'</td></tr>';
}
?>
</tbody>
</table>
</div>