2017-02-20 10 views
2

アプリケーションが(npm installを使用して)インポートできるノードモジュールを作成しています。ノードモジュール内からユーザー固有のファイルをロードする方法は?

... 
function (filePath){ 
    messages = jsonfile.readFileSync(filePath); 
} 
... 

がどのように私は私の関数は、このファイルのパスとプロセスを受け入れることができない:私のモジュール内の関数は(以下filePathで指定)、ユーザーのアプリケーションに設定されている.jsonファイルの場所を受け入れますそれは私の機能がユーザーのアプリケーションファイルがどこに保存されるのかわからないことを考えれば、私のモジュールがそれを見つけることができるようにする方法です。

+1

で書いた場合、それは完全なパスする必要が?アプリケーションは単に 'path.join(__ dirname、...)'を渡すことができます。 – Ryan

答えて

1

ノードライブラリを作成している場合、モジュールはrequireとなり、ユーザーのアプリケーションでnode_modulesフォルダに保存されます。注意すべき点は、コードがユーザーのアプリケーションでコードが実行されるようになるため、パスはユーザーのアプリケーションとの相対的なものになります。

例:echo-fileuser-appの2つのモジュールを作成して、独自のフォルダとして、自分のプロジェクトとしてpackage.jsonを作成しましょう。ここには、2つのモジュールを持つ単純なフォルダ構造があります。

workspace 
|- echo-file 
    |- index.js 
    |- package.json 
|- user-app 
    |- index.js 
    |- package.json 
    |- userfile.txt 

echo-fileモジュール

workspace/echo-file/package.json

{ 
    "name": "echo-file", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": {"test": "echo \"Error: no test specified\" && exit 1"}, 
    "author": "", 
    "license": "ISC" 
} 

workspace/echo-file/index.js(あなたのモジュールのエントリポイント)

const fs = require('fs'); 
// module.exports defines what your modules exposes to other modules that will use your module 
module.exports = function (filePath) { 
    return fs.readFileSync(filePath).toString(); 
} 

user-appモジュール

NPMでは、フォルダからパッケージをインストールすることができます。ローカルプロジェクトをnode_modulesフォルダにコピーしてから、ユーザはrequireとすることができます。

このnpmプロジェクトを初期化した後、npm install --save ../echo-fileとすると、それをユーザーのアプリケーションに依存するものとして追加します。

workspace/user-app/package.json

{ 
    "name": "user-app", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": {"test": "echo \"Error: no test specified\" && exit 1"}, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "echo-file": "file:///C:\\Users\\Rico\\workspace\\echo-file" 
    } 
} 

workspace/user-app/userfile.txt

hello there 

workspace/user-app/index.js

const lib = require('echo-file'); // require 
console.log(lib('userfile.txt')); // use module; outputs `hello there` as expected 

私は私の関数は、このファイルのパスを受け入れ、その私メートル方法でそれを処理できるようにするにはどうすればよいですユーザーのアプリケーションファイルがどこに保存されるのかわからないので、それを見つけることができます。

短いので、ファイルパスはユーザーのアプリフォルダからの相対パスになります。

モジュールがnpm installになると、node_modulesにコピーされます。あなたのモジュールにファイルパスが与えられると、それはプロジェクトとの相対パスになります。ノードはcommonJS module definitionに従います。それにはEggHead also has a good tutorialがあります。

希望すると便利です。

0

絶対パスはどうですか?

あなたはyourapp/lib/index.js.

path.join(__dirname, '../../../xx.json'); 
関連する問題