🏸

nodeJsFunctionで"no loader is configured for ".node" files"

2023/02/01に公開

内容

nodeでsftpしたいなあと思い、ssh2-sftp-clientを用いたlambdaをCDKのnodeJsFunction(別名 神)でデプロイしようとしたところ、以下のエラーが出ました

Bundling asset CdktestStack/testfunc/Code/Stage...
✘ [ERROR] No loader is configured for ".node" files: lib/testfunc/node_modules/cpu-features/build/Release/cpufeatures.node

    lib/testfunc/node_modules/cpu-features/lib/index.js:1:24:
      1 │ const binding = require('../build/Release/cpufeatures.node');
        ╵                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

✘ [ERROR] No loader is configured for ".node" files: lib/testfunc/node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node

    lib/testfunc/node_modules/ssh2/lib/protocol/crypto.js:30:20:
      30 │   binding = require('./crypto/build/Release/sshcrypto.node');
         ╵                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2 errors

解決策

nodeJsFunctionに以下の設定を追加

bundling: {
  loader: {
    '.node': 'file'
  }
},

参考

このIssueで紹介されているworkaroundや、

new NodejsFunction(this, 'testfunc', {
  entry: 'lib/testfunc/index.ts',
  bundling: {
    nodeModules: ['ssh2'],
  }
});

大本のesbuild側のissueで紹介されているプラグイン追加では駄目でした。

最終的に怪しそうなloaderオプションにたどり着いたところ、GitHub Copilotが提案してくれた上記解決策でうまくいきました。笑

Discussion