NativeScript: require('child_process') 在 运行 "tns run ios --emulator" 时给出错误
NativeScript: require('child_process') gives an error when running "tns run ios --emulator"
我有这样的实验代码,只是为了测试从 NativeScript 应用 (myapp/app/views/login/login.js) 调用子进程:
var exec = require('child_process').exec;
exec('ls', function (error, stdout, stderr) {
if(stdout){
console.log('stdout: ' + stdout);
}
if(stderr){
console.log('stderr: ' + stderr);
}
if (error !== null) {
console.log('Exec error: ' + error);
}
});
当我用 "tns run ios --emulator" 测试这个应用程序时,它给出了这样的错误:
file:///app/views/login/login.js:1:89: JS ERROR Error: Could not find module 'child_process'. Computed path '/Volumes/xxxx/Users/xxxx/Library/Developer/CoreSimulator/Devices/392A8058-694B-4A5D-B194-DF935815ED21/data/Containers/Bundle/Application/2822CD65-4E4D-443C-8272-135DB09353FC/sampleGroceries.app/app/tns_modules/child_process'.
我的问题是:我该如何解决这个问题?我应该在应用程序目录上执行 "npm install child_process" 吗?但是当我在 Google 上搜索解决方案时,我读到它应该自然包含在 node_modules...
我在以下位置找到了一个 child_process 模块:
/usr/local/lib/node_modules/nativescript/lib/common
但是正如错误消息所说,当我使用 tns 命令执行应用程序时,它不包括在内。有人可以告诉我我缺少什么吗?
版本信息:
npm:3.10.10
节点:7.2.1
tns: 2.4.2
您看到的 child_process
是 NativeScript CLI 中 Node 的 child_process 的包装器。
NativeScript 中没有 child_process
,因为该概念与移动环境无关 (Android/iOS)。
例如,Node JS 跨平台工作的原因是因为它的引擎对每个支持的平台都有类似的功能实现(文件系统、http、子进程)。
使用节点的 child_process(明确安装并需要它)可能无法工作,因为没有针对移动设备的内部实现。
如果您想在后台执行某些操作,请考虑使用 NativeScript 的 Workers。
http://docs.nativescript.org/angular/core-concepts/multithreading-model.html
编辑:
如果没有现成可用的插件,您可以使用底层原生 API 来调用设备的 shell。
Android: execute shell command from android
iOS (Objective C): Cocoa Objective-C shell script from application?
nativescript 网站上的文档应该可以帮助您 'translating' objC/Java 代码到 JavaScript,尽管它非常简单。
http://docs.nativescript.org/runtimes/android/marshalling/java-to-js
http://docs.nativescript.org/runtimes/ios/marshalling/Marshalling-Overview
我有这样的实验代码,只是为了测试从 NativeScript 应用 (myapp/app/views/login/login.js) 调用子进程:
var exec = require('child_process').exec;
exec('ls', function (error, stdout, stderr) {
if(stdout){
console.log('stdout: ' + stdout);
}
if(stderr){
console.log('stderr: ' + stderr);
}
if (error !== null) {
console.log('Exec error: ' + error);
}
});
当我用 "tns run ios --emulator" 测试这个应用程序时,它给出了这样的错误:
file:///app/views/login/login.js:1:89: JS ERROR Error: Could not find module 'child_process'. Computed path '/Volumes/xxxx/Users/xxxx/Library/Developer/CoreSimulator/Devices/392A8058-694B-4A5D-B194-DF935815ED21/data/Containers/Bundle/Application/2822CD65-4E4D-443C-8272-135DB09353FC/sampleGroceries.app/app/tns_modules/child_process'.
我的问题是:我该如何解决这个问题?我应该在应用程序目录上执行 "npm install child_process" 吗?但是当我在 Google 上搜索解决方案时,我读到它应该自然包含在 node_modules...
我在以下位置找到了一个 child_process 模块: /usr/local/lib/node_modules/nativescript/lib/common
但是正如错误消息所说,当我使用 tns 命令执行应用程序时,它不包括在内。有人可以告诉我我缺少什么吗?
版本信息: npm:3.10.10 节点:7.2.1 tns: 2.4.2
您看到的 child_process
是 NativeScript CLI 中 Node 的 child_process 的包装器。
NativeScript 中没有 child_process
,因为该概念与移动环境无关 (Android/iOS)。
例如,Node JS 跨平台工作的原因是因为它的引擎对每个支持的平台都有类似的功能实现(文件系统、http、子进程)。
使用节点的 child_process(明确安装并需要它)可能无法工作,因为没有针对移动设备的内部实现。
如果您想在后台执行某些操作,请考虑使用 NativeScript 的 Workers。
http://docs.nativescript.org/angular/core-concepts/multithreading-model.html
编辑:
如果没有现成可用的插件,您可以使用底层原生 API 来调用设备的 shell。
Android: execute shell command from android iOS (Objective C): Cocoa Objective-C shell script from application?
nativescript 网站上的文档应该可以帮助您 'translating' objC/Java 代码到 JavaScript,尽管它非常简单。
http://docs.nativescript.org/runtimes/android/marshalling/java-to-js http://docs.nativescript.org/runtimes/ios/marshalling/Marshalling-Overview