Я работаю над простым проектом nodejs electron (ранее известный как атомная оболочка). Я пишу это с помощью angular 2, используя проект с той же настройкой проекта, которую они рекомендуют в документации для машинописного текста:
тск:
{
"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
На данный момент я получаю свой путь, используя:
var child_process = require('child_process');
но я так и не смог добавить информацию о типе в этот var:
var child_process : I_CANT_PUT_ANY_CHILD_PROCESS_TYPE_HERE = require('child_process');
Любые идеи о том, как я могу получить child_process (или любые другие объявленные модули узла, которые не являются общедоступным интерфейсом, который я могу указать после оператора «:») с информацией о типе?
Заранее спасибо за любую помощь и пояснения :)
ОБНОВИТЬ ------------------------------------------------- ------------------
Как предложил tenbits, я добавил ссылку в начало файла следующим образом: ///
и использовал указанный вами статус импорта, но не изменил загрузчик моего модуля. он все еще не работал с той же ошибкой, как ожидалось. Мне не очень удобно менять модульную систему, так как мой проект использует angular 2, и их документы, и некоторые из их руководств говорят, что новые проекты, которые не имеют прежних предпочтений в этом вопросе (я очень новичок в сцене загрузчиков модулей, и я не полное понимание того, как это работает). Когда я попытался изменить его, я получил некоторые ошибки, касающиеся материалов angular 2, на которые у меня сейчас нет времени. Разве не должен быть способ сделать это без изменения загрузчика модуля? взглянув на сайт systemjs, в начале говорится, что он поддерживает модули commonjs: Документация по Systemjs
Я был бы очень признателен за решение, которое не меняет систему модулей, или, может быть, более подробное объяснение того, что происходит и какие существуют подходы к таким проблемам с загрузкой модулей.