80

私の質問は、NPM モジュールとして公開したい既存のライブラリに関するものです。ライブラリは既に使用されており、現在requireはローカル ファイル システム経由で実行されています。

モジュールのファイルのルート ディレクトリを指定するにはどうすればよいですか?

次のような構造がある場合:

.
├── package.json
├── src
|   ├── js
|   └────── lib
|   └───────── my
|   └───────────── thing.js
|   └───────────── that.js

モジュールのルートとアクセス可能なファイルを指定するにはどうすればよいですsrc/js/lib/my/か?

外部プロジェクトから次のように使用したいと思います。

var thing = require('my/thing'),
    that = require('my/that');

package.jsonのプロパティを見ました"files"が、これは正しい方法ですか?

4

7 に答える 7

8

ドキュメントが言うように:

メイン フィールドは、プログラムへの主要なエントリ ポイントであるモジュール ID です。

"main": "src/js/lib/my/app.js"したがって、package.json ファイルには次のようなものがあります。

app.jsファイルとさまざまな子を作成することをお勧めしますmodule.exports。例えば:

 module.exports.thing = require('./thing');
 module.exports.that = require('./that');

そして、次のように使用します。

var mylib = require('mylib')
  , thing = mylib.thing
  , that = mylib.that;
于 2015-05-18T12:14:13.583 に答える
6

package.jsonnpm主に、依存関係のインストールと管理に使用されるファイルです。

requireコンストラクトはあまり気にしないのでpackage.json、それを使用して動作を覆し、ローディング スキームが期待するrequire場所にパッケージがないと信じ込ませることはできません。require

https://nodejs.org/api/modules.htmlのドキュメントと、https://nodejs.org/api/modules.html#modules_all_together のロード スキームを参照してください

ドキュメントで「グローバルフォルダーからの読み込み」と呼ばれる手法を使用して、NODE_PATH環境変数を定義することができます。

ただし、より標準的な方法に固執することをお勧めします。-モジュールをnode_modulesディレクトリに配置する-または、app.jsまたはindex.jsが配置されているのと同じディレクトリでモジュール階層を開始します

于 2015-05-18T12:22:31.717 に答える
4

これは醜い回避策であり、パッケージのルートを汚染します。しかし、ジョーダンの答えがうまくいくまで、これはあなたが求めるものを達成する方法のように感じます.

require とスラッシュ表記を使用して、エクスポートする各モジュールのパッケージのルートにファイルを追加するだけです。このようなファイルは、エクスポートされるモジュールと同じ名前になり、単純に再エクスポートされます。

.
├── package.json
├── thing.js       <--
├── that.js        <--
├── src
|   ├── js
|   └────── lib
|   └───────── my
|   └───────────── thing.js
|   └───────────── that.js

たとえば、ファイルには次のもの./thing.jsが含まれます。

module.exports = require('./src/js/lib/my/thing');

したがって、次のように要求できます。

const thing = require('mypackage/thing');

また、プロパティの追加に関するバグmainDirpackage.jsonで述べたように、ソースと package.json ファイルを一時的に 1 つのディレクトリにコピーして、そこから公開することもできます。

于 2018-04-18T17:43:38.060 に答える
2

もう 1 つの可能性は、ECMAScript モジュール (ES モジュール)、特にpackage.jsonファイルのパッケージ エクスポートフィールドを使用することです。

この構成のpackage.jsonファイルが与えられた場合:

{
  "name": "my",
  "exports": {
    "./": "./src/js/lib/my/"
  }
}

次のようなライブラリからモジュールをインポートできるはずです。

import thing from 'my/thing'
import that from 'my/that'

これは node からデフォルトで有効になっていますが、からのフラグ13.0.0の背後にありました。--experimental-exports12.13.0

ES モジュールの仕様は安定性:1 - 実験段階にあり、変更される可能性があることに注意してください。これが CommonJS モジュールとどの程度互換性があるかはわかりません。

于 2019-08-29T14:11:12.983 に答える