2017-08-02 4 views
1

Ma structure actuelle du dossier pour tapuscrit:question tsconfig.json multiple avec CommonJS pour Node.js et ES6 pour reactjs

ts_dev 
--client 
    *components.tsx 
    *tsconfig.json 

--server 
    *server.ts 
    *tsconfig.json 
    --share 
    *utility.ts 

Le serveur Node.js a besoin d'utiliser commonjs modules et es2015 pour le client composants latéraux. Je place la part dossier utilisé par les deux client et serveur sous le serveur répertoire car il a besoin pour commonJS Node.js.

tsconfig.json dans serveur:

{ 
    "compilerOptions": { 
    "module": "commonJS", 
    "target": "es2015", 
    "moduleResolution": "node", 
    "outDir": "../../src", 
    "lib": ["es6", "dom"], 
    "types": ["reflect-metadata","system"], 
    "jsx": "react" 
    }, 
    "exclude": [ 
    "node_modules", 
    ] 
} 

tsconfig.json dans le client:

{ 
    "compilerOptions": { 
    "module": "es2015", 
    "target": "es2015", 
    "moduleResolution": "node", 
    "outDir": "../../src", 
    "lib": ["es6", "dom"], 
    "types": ["reflect-metadata","system"], 
    "jsx": "react" 
    }, 
    "exclude": [ 
    "node_modules", 
    ] 
} 

Cependant, je trouve que les scripts dans share sont toujours respectées dans ES6 (Utiliser l'exportation, l'importation etc) au lieu de commonJS, ce qui casse mon serveur. Je soupçonne qu'il est causé par le tsconfig dans le client. Que puis-je faire pour résoudre ce problème?

Répondre

1

Je suggère d'utiliser l'option include dans chaque fichier tsconfig.json avec des globes de fichier, pour limiter les fichiers compilés via chaque fichier de configuration. J'ai résolu un problème similaire à l'aide de outDirs. Ce que je pense vous arrive, c'est que vous compilez les fichiers source deux fois, et la dernière fois compile le JS à es2015, en écrasant le premier. En d'autres termes, la version server est compilée en premier, puis la version client est compilée et l'écrase, car les sorties vont dans le même répertoire.