2

njs で「ネイティブ」な nodejs モジュールを使用する方法を説明するガイドhttps://nginx.org/en/docs/njs/node_modules.htmlガイドがあります。

太字の意味がわからなくなるまで、ガイドに従いました。

この例では、生成されたコードは関数
にラップされていないため、明示的に呼び出す必要がないことに注意してください。結果は「dist」ディレクトリにあります。

$ cat dist/wp_out.js code.js > njs_dns_bundle.js

ファイルの最後でコードを呼び出しましょう: <<<--- HERE

var b = set_buffer(global.dns);
console.log(b);

ノードを使用して実行します。

$ node ./njs_dns_bundle_final.js

質問は、webpack で生成された njs_dns_bundle.js を njs_dns_bundle_final.js に含める/要求する/インポートする方法です。これは、ファイルの最後でコードを呼び出しましょう。それがないと、エラーが発生します。

njs_dns_bundle_final.js:1
var b = set_buffer(global.dns);
ReferenceError: set_buffer is not defined

私のコード.js:

module.exports = {
   hello: function set_buffer(dnsPacket) {
        // create DNS packet bytes
        var buf = dnsPacket.encode({
            type: 'query',
            id: 1,
            flags: dnsPacket.RECURSION_DESIRED,
            questions: [{
                type: 'A',
                name: 'google.com'
            }]
        })

        return buf;
    }
}

私の njs_dns_bundle_final.js:

var myModule = require('./njs_dns_bundle');

var b = myModule.hello(global.dns);
console.log(b);

ノードは正常に動作すると思いますか?!:

node ./njs_dns_bundle_final.js
<Buffer 00 01 01 00 00 01 00 00 00 00 00 00 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01>

NJS は以下を行いません。

njs ./njs_dns_bundle_final.js
Thrown:
Error: Cannot find module "./njs_dns_bundle"
    at require (native)
    at main (njs_dns_bundle_final.js:1)

ありがとう

4

0 に答える 0