0

異なるノード モジュールを含むデータベースにコードがあります。このような:

exports.hello = hello

通常、私はただ使用しますhello = require './hello.js'。ただし、コードはデータベースに保存されるため、ファイルへのパスを含めることはできません。私がしようとするとき

eval unescape hello_from_db_code動作しません。

requireファイルへのパスを持たずに機能を取得する方法はありますか?

4

2 に答える 2

1

「機能しない」が「モジュールがエクスポートされておらず、未定義のグローバルが存在する」である場合は、コンテキストで参照が欠落している状態で eval を試みることができます。

vm = require 'vm'
requireFromString = (str, filename) ->
  sandbox =
    module:
      exports: {}
    require: require
    __filename: filename
  vm.runInNewContext(src, sandbox, filename)
  sandbox.module.exports

サンドボックスへの追加の参照を追加したい場合があります。module.jsModule.prototype._compileの関数を見てください。また、次のように直接アクセスすることもできますhello = module._compile(hello_from_db_code)

于 2013-06-09T10:25:21.397 に答える