node.js - Mohu dynamicky vyloučit soubory z kompilátoru TS?
Nastavuji server v Node/TypeScript, abych vytvořil aplikaci v reálném čase. Mám server i klienta ve stejné složce.
Co chci udělat, je vyloučit "src/client" z kompilátoru TypeScript, když spustím skript "server:dev", a vyloučit "src/server", když spustím "client:dev".
Už jsem se snažil najít způsob, jak vyloučit soubory z příkazového řádku, ale nenašel jsem pro to řešení.
takto vypadá můj tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"lib": ["dom","es2017"],
"sourceMap": true,
"outDir": "dist",
"strict": true,
"noImplicitAny": true,
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true
},
"exclude": [
"src/client"
]
}
ale potřebuji zahrnout "src/client" a vyloučit "src/server", když spouštím klienta.
Odpověď č. 1
Soubor tsconfig.json podporuje pole extends, ve vašem případě byste měli umístit společné nastavení do základního tsconfig.json, a poté vytvořit tsconfig s extends pro klienta a server zvlášť.
// tsconfig.json
{
"compilerOptions": {
...
}
}
// tsconfig.client.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
...
},
"exclude": ["src/server"]
}
// tsconfig.server.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
...
},
"exclude": ["src/client"]
}
Pro skripty npm:
// package.json
{
"scripts": {
"server:dev": "tsc --build tsconfig.server.json",
"client:dev": "tsc --build tsconfig.client.json",
}
}
Odpověď č. 2
Obecný přístup ke změně možností překladače dynamicky:
jelikož modul fs může být používán v node.js, můžete do svého projektu node.js přidat tuto utilitní funkci:
const fs = require("fs")
const prettier = require("prettier")
function changeTs(){
// this guarantees that I am on server
if(typeof window === "undefined"){
// process.cwd returns base folder, current working directory
// whatever path is
const tsPath = path.join(process.cwd(), "tsconfig.json")
const tsConfig = require(tsPath)
tsConfig.compilerOptions.exclude = ["src/client"]
fs.writeFileSync(
tsPath,
prettier.format(
JSON.stringify(tsConfig), { parser: "json" }
)
)
}
}
volejte výše uvedenou funkci na nejvyšší úrovni při načítání aplikace node.js, aby byl aktualizován soubor tsconfig.json. Výchozí nastavení by mělo být "exclude": ["src/server"]. Když jste na serveru, bude změněno na "exclude": ["src/client"]
S tímto přístupem můžete dokonce předat argument funkci, takže můžete změnit možnosti kompilátoru TypeScript na základě konkrétního nastavení, které vaše aplikace potřebuje.
