状況は次のとおりです… そこで、いくつかの Node.js テンプレート エンジンShift.jsへのインターフェイスとして機能する Node.js モジュールを作成しました。これは、別の Node.js モジュールであるDesign.ioに含まれています (Design.io の package.jsondependencies
ブロックに指定されています)。Design.io はファイルの変更を監視します。
次に、アプリとrequire('design.io')
. たとえば、Less と Stylus もプロジェクトにインストールします。
このようにして、.less
または.styl
ファイルを保存すると、一連のメソッドが呼び出されます。
require("design.io")
ファイルシステム イベントの通知を受け取ります。次に Design.io が呼び出しますrequire('shift').render(string, extension, callback)
. 次に、Shift.js が呼び出しますrequire(moduleFor(extension)) # require("less")
. 文字列がコンパイルされます。
アプリ (現在の作業ディレクトリ) に、less とスタイラスをインストールしました。
npm install less stylus
私が抱えている問題は、Shift.js モジュール内から呼び出されるステップ 3で、次のようなエラーが発生することです。
Error: Cannot find module 'less'
at Function._resolveFilename (module.js:334:11)
at Function._load (module.js:279:25)
at Module.require (module.js:357:17)
at require (module.js:368:17)
at Less.engine (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift/less.js:6:14)
at Less.render (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift/less.js:18:21)
at /Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift.js:69:23
at /Users/viatropos/Documents/git/plugins/design.io/node_modules/async/lib/async.js:118:13
at Object.forEachSeries (/Users/viatropos/Documents/git/plugins/design.io/node_modules/async/lib/async.js:134:9)
at Object.render (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift.js:78:31)
私の質問は、なぜこれが起こっているのですか?ライブラリがどこかにインストールされている限り、モジュールからライブラリを動的に要求できると思いました...何が欠けていますか?
目標は、Shift.js のようなライブラリがすべての単一の依存関係を定義する必要がないことpackage.json
です...「テンプレート エンジンへのインターフェイス」ライブラリの場合、アプリがおそらく決して使用しない依存関係が多すぎる必要があります。
助けてくれてありがとう、それが幾分明確だったことを願っています。