2017-08-25 12 views
-1

私の質問のタイトルは、node.jsアプリケーションからコマンドラインツールを実行する方法です。ここでの答えは、npmからインストール可能なすべてのコマンドラインユーティリティ。私はnode.jsからコマンドラインを実行することに関連する質問を見たことがありますが、私の状況では動作していないようです。具体的には、npmと同様のノードコマンドラインユーティリティを実行しようとしています(どのように使用されているのか、その機能ではない)、tilemantleと呼ばれています。node.jsアプリケーションからコマンドラインツールを実行する方法

タイルマントルのdocumentationは、タイルマントルをグローバルにインストールし、コマンドラインからプログラムを実行していることを示しています。

私がしたいことは、npm install tilemantle --saveを使ってnpmプロジェクトの一部としてローカルにtilemantleをインストールしてから、自分のプロジェクト内からtilemantleを実行することです。

私は `tilemantle = require( 'tilemantle')を試しましたが、tilemantleプロジェクトのindex.jsファイルが空であるため、これは何の助けにもならないと思います。

は、私はこれがすべてのエラーをスローしないプロジェクト node-cmd

const cmd = require('node-cmd'); 
cmd.run('./node_modules/tilemantle/bin/tilemantle', 'http://localhost:5000/layer/{z}/{x}/{y}/tile.png', '-z 0-11', '--delay=100ms', '--point=37.819895,-122.478674', '--buffer=100mi' 

を試してみましたが、それはまた、単に動作しません。

私も子供が

const child_process = require('child_process'); 
child_process.exec('./node_modules/tilemantle/bin/tilemantle', 'http://localhost:5000/layer/{z}/{x}/{y}/tile.png, -z 0-11 --delay=100ms --point=37.819895,-122.478674 --buffer=100mi' 

これはまた、すべてのエラーをスローしませんが、それはまた、動作しませんを処理しようとしました。

私のプログラムの中からtilemantleを実行できるように、これを稼働させる方法はありますか?それをグローバルにインストールする必要はありませんか?

更新

私はjkwok

child_process.spawn('tilemantle', ['http://myhost.com/{z}/{x}/{y}.png', 
    '--point=44.523333,-109.057222', '--buffer=12mi', '-z', '10-14'], 
    { stdio: 'inherit' }); 

により示唆されるように、私は次のことを実行した場合、私は交換した場合、私はspawn tilemantle ENOENTを取得しています

node './node_modules/tilemantle/bin/tilemantle', 'http://localhost:5000/layer/{z}/{x}/{y}/tile.png', '--delay=100ms', '--point=37.819895,-122.478674', '--buffer=100mi', '-z 0-11' 

でtilemantleは私の端末から実行するように得ることができますタイルマントル./node_modules/tilemantle/bin/tilemantle.jsと私は得るspawn UNKNOWN

は、私が実際にノードを産卵する必要がありますように聞こえるjfriend00's answerに基づいて、私は私が私の端末から、それを実行することができますので、奇妙なようにエラーspawn node ENOENTを与え、次の

child_process.spawn('node', ['./node_modules/tilemantle/bin/tilemantle.js', 'http://myhost.com/{z}/{x}/{y}.png', '--point=44.523333,-109.057222', '--buffer=12mi', '-z', '10-14'], { stdio: 'inherit' }); 

を試してみましたが、私は私の道を確認しました変数はC:\Program Files\nodejsです。

ちょうど私がノードへのフルパスで以下を実行しようとしました。

child_process.spawn('c:/program files/nodejs/node.exe', ['./node_modules/tilemantle/bin/tilemantle.js', 'http://myhost.com/{z}/{x}/{y}.png', '--point=44.523333,-109.057222', '--buffer=12mi', '-z', '10-14'], { stdio: 'inherit' }); 

ENOENTエラーなしで実行されますが、再び黙って失敗していて、自分のタイルサーバーをウォームアップしていません。

私は6.11.0

+0

私がリンクしている投稿には、Windows [ここ](https://stackoverflow.com/questions/17516772/using-nodejss-spawn-causes-unknown-option-and-error-spawn-enoent)での実行に関するコメントがあります。 -err/17537559#17537559) – jkwok

答えて

-1

多くのコマンドラインユーティリティは、 "プログラム的な" APIが付属してノードでWindows 10のx64を実行しています。残念なことに、タイルマントルは、なぜあなたはrequireあなたのコード内のモジュールにできないです。

ただし、ローカルにインストールされたバージョンのCLIは、npmスクリプトから簡単にアクセスできます。私はタイルマントルについて何も知らないので、tldrコマンドラインツールを使用した例を提供します。あなたのpackage.jsonで:

{ 
    "name": "my-lib", 
    "version": "1.0.0", 
    "scripts": { 
    "test": "tldr curl" 
    }, 
    "dependencies": { 
    "tldr": "^2.0.1" 
    } 
} 

あなたは今tldr curlの別名としてプロジェクト内の端末からnpm testを実行することができます。 this postパー

、あなたのコードからNPMのスクリプトを実行するために、グローバルNPMパッケージを使用することができます。あなたは今、それが持っているにもかかわらず、ローカルにインストールCLIプログラムで(ISH)を実行することができ、

const npm = require('global-npm') 

npm.load({}, (err) => { 
    if (err) throw err 

    npm.commands.run(['test']) 
}) 

出来上がりそのためのAPIは提供されていません。

0

任意の実行可能ファイルをローカルにインストールし、child_processで実行することができます。そのためには、正確なパスが実行可能ファイルと何であるかを把握し、そのパスをchild_process.exec()またはchild_process.spawn()コールに渡すだけです。

node <somepath>/tilemantle.js 

をWindows上にインストールすると、あなたが実行した場合、それはあなたのためのほとんどを行います:あなたが最終的に実行するように見える何

はありません、コマンドラインで

node_modules\.bin\tilemantle.cmd 

あなたが(例えば、他のプラットフォーム上で)直接のjsファイルを実行したい場合は、あなたが実行する必要があります。

node node_modules/tilemantle/bin/tilemantle.js 

child_processでは、実際の実行可能ファイルを指定する必要があります。この場合、実行するjsファイルへのパスは "node"そのものです。

これはもちろん、すべてがシステムがそれを見つけることができるようにノードがあなたのパスにあることを前提としています。あなたのパスにない場合は、実行可能ファイルへのフルパスを使用する必要があります。

0

tilemantleの出力をキャプチャして、コマンドラインではなくファイルを実行しようとしているようです。もしそうなら、私は以下のことをして、それを働かせました。

tilemantlechild_processをローカルで新しいnpmプロジェクトにインストールして、そのプロジェクトのファイルに以下を追加しました。

// test.js file 
var spawn = require('child_process').spawn; 

spawn('tilemantle', ['http://myhost.com/{z}/{x}/{y}.png', '-- 
    point=44.523333,-109.057222', '--buffer=12mi', '-z', '10-14'], { stdio: 'inherit' }); 

プロジェクト内でnode test.jsを使用して実行します。

私はthis postに他のオプションを試しましたが、他の出力と一緒に進捗状況を表示するには上記のものしか得られませんでした。お役に立てれば!

関連する問題