- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在开发一个简单的 nodejs electron (以前称为原子壳)项目。我正在使用 angular 2 编写它,使用与他们在 typescript 文档中推荐的相同项目设置:
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"
]
}
我需要运行一个命令,我发现我可以使用 Node “child_process”来执行它。在从 node.d.ts 文件中使用它的类型时,我无论如何都找不到“导入”或“要求”它。我在 node.d.ts 文件中找到了适合我需要的“child_process”接口(interface),这就是它在 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 获得这种类型:
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(或任何其他声明的 Node 模块,这些 Node 模块不是我可以在“:”运算符之后声明的公共(public)接口(interface))有什么想法吗?
非常感谢任何帮助和解释:)
更新 ---------------------------------------------- --------------------
按照 tenbits 的建议,我在文件顶部添加了如下引用:///
并使用了您所说的导入语句,但没有更改我的模块加载器。它仍然没有像预期的那样出现相同的错误。我对更改模块系统感觉不太舒服,因为我的项目使用 angular 2,他们的文档和他们的一些指南说新项目以前没有对这个问题的偏好(我对模块加载器场景很陌生,我不是完全理解它是如何工作的)。当我尝试更改它时,我遇到了一些关于 angular 2 东西的错误,我目前没有足够的时间进入。在不改变模块加载器的情况下不应该有办法吗?通过浏览 systemjs 站点,它在一开始就说它支持 commonjs 模块: Systemjs doc
我真的很想提供一个不改变模块系统的解决方案,或者更深入地解释正在发生的事情以及存在哪些解决此类模块加载问题的方法
最佳答案
好的,经过一番研究#L138我找到了解决办法
你可以像以前一样使用import
import * as child from 'child_process';
var foo: child.ChildProcess = child.exec('foo.sh');
console.log(typeof foo.on);
但你应该配置 SystemJS
将模块映射到 NodeJS
。
System.config({
map: {
'child_process': '@node/child_process'
}
});
就是这样!
关于node.js - 需要带有 TypeScript、SystemJS 和 Electron 的 nodejs "child_process",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36546860/
当我使用以下命令设置 jspm 安装时: jspm init 然后它只询问我初始配置: Would you like jspm to prefix the jspm package.json prop
我正在使用标准的 ngUpgrade 模块将 AngularJS 应用程序升级到 Angular。我已将服务转换为 Angular,我需要将其降级以便在现有的 AngularJS 模块中使用它。我正在
我正在 SystemJS+Typescript 环境中运行 Jasmine 测试(基本上 a plunk 这应该是 Angular 2 测试平台)。 Jasmine 有意用作全局库,而不是通过 Typ
我有一个没有安装 systemJS 的项目。 这是 package.json: { "name": "mytest", "version": "0.1.0", "private": tru
我使用 SystemJS 作为模块系统来编译 TypeScript 文件,但每当我在浏览器中加载页面时(通过 live-server ),我都会收到以下错误: ReferenceError: Sens
我正在尝试将我的应用程序与 webpack 捆绑在一起,然后将其包含在带有 SystemJS 的父应用程序中,我有点迷失了。 我已经创建了我的包,我已经尝试将它转换为 commonjs/umd/amd
我无法让 systemjs 工作,所以它解析节点模块。 我的 index.html 中有以下内容: System.import('blast/test') .the
我正在尝试遵循 Angular 2 设置指南,但遇到了问题。我正在使用 browsersync,我似乎无法弄清楚如何让这段代码工作。 ....... System.import('./a
有没有办法等到所有 System.register(从 ES6 转译而来)都被解析和加载? 这对于 e2e testing in Angular 特别有用和其他小东西。 最佳答案 System.imp
我有一个非常基本的 config.js文件按预期工作,只要它部署在根 URL 下。这是样本 config.js文件: System.config({ //use typescript for co
我想导入 Angular,实例化 AngularJS 模块,然后导入另一个需要实例化 Angular 的文件: import angular from 'angular'; var app = ang
在尝试让 Angular (1.x) 与 systemjs 一起工作时,我意识到目前没有能力(据我所知)自动将 $inject 插入到 Angular 组件中,这使得即使函数的参数被缩小器破坏,组件也
我正在使用 jspm 和 SystemJS 导入 ES2015 模块。 是否可以通过 System 对象或其他任何地方获取项目中所有导入模块的列表?我可以通过 System._loader.modul
我正在使用 JSPM、AngularJS、TypeScript、SystemJS 和 ES6 并且我的项目运行得很好......除非我尝试使用 momentJS。 这是我得到的错误: TypeErro
有人可以告诉我如何使用 SystemJS 将简单的 javascript 文件加载到浏览器中。 我正在尝试使用以下语法从我的node_modules文件夹加载jquery: packages: {
我在使用 systemjs-builder 构建我的应用程序时遇到问题。 这是我的应用程序的结构。 这是要构建的函数: var systemjsBuild = { map: {
有人让 SystemJS 和 SignalR 一起工作吗?我一直在尝试使用 SystemJS(来自 jspm)加载 SignalR,但无论我做什么,异步加载器总是存在竞争条件。大约一半的加载时间,Si
我正在使用 Angular2,并且我想包含 jQuery。 systemjs.config.js (function (global) { System.config({ paths: { '
我在所有项目中都使用 SystemJs 和 JSPM,感觉太棒了。使用前端库变得前所未有的简单,使用 JSPM 我可以通过几个简单的步骤来完成: 命令行:jspm 安装角度 index.ts|js:i
我无法使用 SystemJS (0.19.47) 正确加载 RxJS 基本上我有一些 TypeScript…… import {BehaviorSubject} from "rxjs"; let s
我是一名优秀的程序员,十分优秀!