Я работаю над простым узлом nodejs electron (ранее называемым атомарным корпусом). Я пишу его с помощью угловой 2, с помощью проекта же настройки проекта, как они рекомендуют в документации по машинописи:Требовать nodejs "child_process" с помощью TypeScript, SystemJS и Electron
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"
]
}
Мне нужно выполнить команду, я обнаружил, что Я могу сделать это с помощью узла «child_process». В любом случае, я не смог найти «импортировать» или «потребовать» его, указав его тип, используемый в файле node.d.ts. Я нашел интерфейс «child_process» в файле node.d.ts, который подходит моя потребность, это, как она смотрит в файле node.d.ts:
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;
}
, но я только могу (как я знаю) получить этот тип только с помощью импорта:
import * as child_process from 'child_process';
только проблема в том, что, когда я делаю это, мое приложение нагрузки косяк, и я получаю следующее сообщение об ошибке в консоли:
GET file:///C:/angular2Samples/NGW-electron-VS%20-%20TEMP/child_process net::ERR_FILE_NOT_FOUND
Сейчас , я получаю мой wa у вокруг с помощью:
var child_process = require('child_process');
, но я не мог найти в любом случае, чтобы добавить информацию о типе этой вар:
var child_process : I_CANT_PUT_ANY_CHILD_PROCESS_TYPE_HERE = require('child_process');
Любые идеи о том, как я могу получить child_process (или любой другой узел объявлен модули, которые представляют собой открытый интерфейс, который я могу указать после оператора «:») с информацией о типе?
Большое спасибо заранее за любую помощь и объяснения :)
UPDATE ------------------------------ ------------------------------------
В качестве предлагаемого десятилетия я добавил ссылку следующим образом в верхней части файла: ///
и использовал статут импорта, который вы сказали, но не использовал мой модуль-загрузчик. он все еще не работал с той же ошибкой, что и ожидалось. Я не чувствую себя очень комфортно в отношении изменения модульной системы, так как мой проект использует угловые 2 и их документы, а некоторые из их гидов сказали, что новые проекты, у которых нет прежних предпочтений по этому вопросу (я очень новичок в области загрузчиков модулей и им не полностью понимая, как это работает). Когда я попытался изменить его, у меня появились некоторые ошибки в отношении угловых 2 вещей, на которые у меня нет времени, чтобы попасть в данный момент. Разве не может быть этого, не меняя загрузчик модуля?взглянув на systemjs месте он говорит в самом начале, что он поддерживает CommonJS модули: Systemjs doc
Я действительно appriciate решение, которое не изменяет систему модуля, или, может быть, больше глубины explanition о том, что происходит и какие подходы к такого рода проблем загрузки модуля существует там
Большое спасибо за Ваш комментарий! Я пробовал это, пожалуйста, посмотрите мое обновление к заданию относительно вашего ответа :) –
Я не совсем понял: вы пробовали «import child = require ('child_process');' вместо 'var child = require ('child_process'); '? У вас есть тот же результат, что и с 'var'? – tenbits
Да, точно так же (обратите внимание, что я не изменил модуль на commonjs, как вы сказали, причина этого указана в моем обновлении выше) –