Besoin de nodejs “child_process” avec Tapuscrit, SystemJS et de l'Électron
Je suis en train de travailler sur un simple nodejs electron (anciennement connu sous atom shell) de projet.
Je vais écrire à l'aide angulaire 2, en utilisant le projet le même projet d'installation comme ils recommandent dans la documentation de la machine:
tsc:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
}
J'ai besoin pour exécuter une commande, j'ai découvert que je peux le faire avec le noeud "child_process".
Je ne pouvais pas trouver de toute façon pour moi de "l'importation" ou "exiger" tout en ayant son type utilisé à partir du nœud.d.fichier ts. J'ai trouvé le "child_process" de l'interface dans le nœud.d.ts fichier qui correspond à mon besoin,
c'est de cette façon qu'il recherche dans le nœud.d.ts fichier:
declare module "child_process" {
import * as events from "events";
import * as stream from "stream";
export interface ChildProcess extends events.EventEmitter {
stdin: stream.Writable;
stdout: stream.Readable;
stderr: stream.Readable;
pid: number;
kill(signal?: string): void;
send(message: any, sendHandle?: any): void;
disconnect(): void;
unref(): void;
}
export function spawn(command: string, args?: string[], options?: {
cwd?: string;
stdio?: any;
custom?: any;
env?: any;
detached?: boolean;
}): ChildProcess;
export function exec(command: string, options: {
cwd?: string;
stdio?: any;
customFds?: any;
env?: any;
encoding?: string;
timeout?: number;
maxBuffer?: number;
killSignal?: string;
}, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess;
export function exec(command: string, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess;
export function execFile(file: string,
callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess;
export function execFile(file: string, args?: string[],
callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess;
export function execFile(file: string, args?: string[], options?: {
cwd?: string;
stdio?: any;
customFds?: any;
env?: any;
encoding?: string;
timeout?: number;
maxBuffer?: number;
killSignal?: string;
}, callback?: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess;
export function fork(modulePath: string, args?: string[], options?: {
cwd?: string;
env?: any;
execPath?: string;
execArgv?: string[];
silent?: boolean;
uid?: number;
gid?: number;
}): ChildProcess;
export function spawnSync(command: string, args?: string[], options?: {
cwd?: string;
input?: string | Buffer;
stdio?: any;
env?: any;
uid?: number;
gid?: number;
timeout?: number;
maxBuffer?: number;
killSignal?: string;
encoding?: string;
}): {
pid: number;
output: string[];
stdout: string | Buffer;
stderr: string | Buffer;
status: number;
signal: string;
error: Error;
};
export function execSync(command: string, options?: {
cwd?: string;
input?: string|Buffer;
stdio?: any;
env?: any;
uid?: number;
gid?: number;
timeout?: number;
maxBuffer?: number;
killSignal?: string;
encoding?: string;
}): string | Buffer;
export function execFileSync(command: string, args?: string[], options?: {
cwd?: string;
input?: string|Buffer;
stdio?: any;
env?: any;
uid?: number;
gid?: number;
timeout?: number;
maxBuffer?: number;
killSignal?: string;
encoding?: string;
}): string | Buffer;
}
mais je ne peux (que je connais) de ce type uniquement à l'aide d'importation:
import * as child_process from 'child_process';
Seul problème est que quand je fais cela, mon application cant charge et j'obtiens l'erreur suivante dans la console:
GET file:///C:/angular2Samples/NGW-electron-VS%20-%20TEMP/child_process net::ERR_FILE_NOT_FOUND
Pour l'instant, je me fais mon chemin en utilisant:
var child_process = require('child_process');
mais je ne pouvais pas trouver de toute façon pour ajouter le type d'informations à ce var:
var child_process : I_CANT_PUT_ANY_CHILD_PROCESS_TYPE_HERE = require('child_process');
Des idées sur comment je peux obtenir le child_process (ou tout autre déclaré nœud modules qui arent interface publique que je peux dire après ":" l'opérateur) avec des informations de type?
Merci beaucoup d'avance pour toute l'aide et les explications 🙂
Mise à JOUR ------------------------------------------------------------------
Comme tenbits suggéré, j'ai ajouté la référence comme suit le début du fichier:
///
et utilisé l'importation de tresorerie vous l'avez dit, mais il n'a pas chage mon chargeur de module. - il encore, na pas de travailler avec la même erreur que prévu.
Je ne suis pas très à l'aise sur la modification du système de module, comme mon projet utilise angulaire 2 et ses docs et certains de leurs guides, a déclaré que les nouveaux projets qui n'a pas d'ancien prefernce à cette question (je suis très nouveau pour le module de chargeuses sur scène et je ne suis pas entièrement comprendre comment il fonctionne encore).
Quand j'ai essayé de changer, j'ai eu quelques erreurs concernant angulaire 2 stuffs qui je n'ai pas assez de temps pour entrer dans le moment. Ne devrait-il pas être un moyen de ce sans changer le chargeur de module? en jetant un coup d'oeil à la systemjs site il est dit au début qu'il prend en charge commonjs modules:
Systemjs doc
Je remercie vraiment une solution qui ne change pas le système de module, ou peut-être un plus en profondeur explanition sur ce qui se passe et quelles approches de ce genre de module de problèmes de chargement existe là
Vous devez vous connecter pour publier un commentaire.
Ok, après quelques recherches #L138 j'ai trouvé la solution
Vous pouvez utiliser
import
comme avantMais vous devez configurer
SystemJS
à la carte du module deNodeJS
.Que c'est!
import child = require('child_process');
au lieu devar child = require('child_process');
? Avez-vous le même résultat qu'avecvar
?SystemJS
, seul le texte tapé à la Machine et de l'Électron, mais je suppose que le problème, c'est queSystemJS
chargement de module nodejs comme navigateur régulier de la dépendance. Au premier abord, j'ai proposé à la carte en quelque sorte CommonJS module nom du modèle. Lorsque que pas aidé, je viens de regarder dans le code source pour comprendre comment la cartographie des œuvres, et vu que c'était ce@node
préfixe nécessaire. Oui, Il doit être documentée, mais vous pouvez toujours jeter un oeil sur le code source, de sorte que vous pouvez comprendre comment la bibliothèque a été "conçu"). Cheers@node/
vous ne pouvez charger le noyau nœud modules, voir la ligne et de l'avis de lanodeCoreModules
tableau. Ce qui fonctionne bien:import * as baz from 'node_modules/foo/x.js';
Et pour Tapuscrit vous devez créer vide de définition de module pour obtenir ce compilé.node.d.ts
. Vous faites cela avectsd
. L'installer en premier:npm install tsd -g
. Puis dans votre répertoire de projet exécutez la commandetsd install node
. Cela permettra d'installernode.d.ts
danstypings
répertoire. Et créertsconfig.json
.tsconfig.json
vous avez la propriété"moduleResolution": "node",
. Peut-être aussi essayer d'installer nœud typings avec enregistrer falgtds install node --save
. N'hésitez pas à donner aussi les commentaires)child_process
modules: Peut-être que vous devriez commencer la nouvelle question et d'expliquer votre problème en détails, afin que nous passons à la discussion là-dedans?Pour moi, il a travaillé avec le rappel pour afficher les résultats.
Je n'ai pas ajouter des mappages dans SystemJS que je n'ai pas ce type de configuration dans le nœud de l'application