NativeScript: require ('child_process') выдает ошибку при запуске 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», оно выдает такую ​​ошибку:

файл: ///app/views/login/login.js: 1: 89: ОШИБКА JS Ошибка: не удалось найти модуль child_process. Вычисленный путь '/ Volumes / xxxx / Users / xxxx / Library / Developer / CoreSimulator / Devices / 392A8058-694B-4A5D-B194-DF935815ED21 / data / Containers / Bundle / Application / 2822CD65-4E4D-443C-8272-135DB09353FC / sampleGroceries. приложение / приложение / 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


person Mumi    schedule 13.12.2016    source источник


Ответы (1)


child_process, который вы видите, является оболочкой в ​​интерфейсе командной строки NativeScript для дочернего_процесса узла.

В NativeScript нет child_process, поскольку эта концепция не актуальна в мобильных средах (Android / iOS). Причина, по которой Node JS работает кроссплатформенно, например, заключается в том, что его движок имеет аналогичную реализацию функций (файловая система, http, дочерний процесс) для каждой из поддерживаемых платформ.

Использование узла child_process (его явная установка и требование), скорее всего, не сработает, поскольку для мобильных устройств нет собственной реализации.

Если вы хотите выполнить что-то в фоновом режиме, подумайте об использовании Workers NativeScript.

http://docs.nativescript.org/angular/core-concepts/multithreading-model.html

Редактировать:

Если плагин еще не доступен, вы можете использовать базовый собственный API для вызова оболочки устройства.

Android: выполнить команду оболочки из android iOS (цель C): Сценарий оболочки Cocoa Objective-C из приложения?

На сайте nativescript доступны документы, которые должны помочь вам в «переводе» кода objC / Java в JavaScript, хотя это довольно просто.

http://docs.nativescript.org/runtimes/android/marshalling/java-to-js http://docs.nativescript.org/runtimes/ios/marshalling/Marshalling-Overview

person pkanev    schedule 13.12.2016
comment
Спасибо, я застрял в этой штуке почти на 2 дня и не мог понять это самостоятельно ... то, что я хотел сделать, сейчас не должно выполняться в фоновом режиме, я просто хотел выполнить несколько общих Команды оболочки на iOS и Android. Является ли это возможным? - person Mumi; 14.12.2016