1

サーバー側の node.js アプリケーションを開発しており、次の構成で webpack 2 を使用してバンドルを作成しています。

{
  entry: [
    './api/server.js'
  ],
  target: 'node',
  devtool: 'source-map',
  context: path.resolve(__dirname, '..'),
  output: {
    path: path.resolve(__dirname, '..', 'build', 'server'),
    filename: 'server.js'
  },

  resolve: {
    modules: ['node_modules'],
    extensions: ['.js']
  },

  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        query: {
          presets: [
            ['es2015', { modules: false }],
            'stage-0'
          ],
          plugins: [
            'transform-object-rest-spread',
            'babel-plugin-transform-decorators-legacy',
            'transform-class-properties'
          ]
        }
      },
      {
        test: /\.json$/,
        loader: 'json-loader'
      }
    ]
  }
}

私の依存関係の 1 つは node-argon2 ライブラリで、このライブラリを にインポートしserver.jsます。webpack によって生成された結果のバンドル ファイルには、次のように、argon2 コードが含まれています。

,
/* 62 */
/* unknown exports provided */
/* all exports used */
/*!*MYPROJECT/~/argon2/index.js ***!!*\
/***/ function(module, exports, __webpack_require__) {

"use strict";
eval("'use strict'\nconst crypto....

この場合、次のエラーが表示されます。

(node:23259) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Path must be a string. Received undefined
(node:23259) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

私は上記のエラーをserver.js、arg2 モジュールのみをインポートする最小限のもので再現します。これは、Argon2 ライブラリがネイティブ コードを呼び出すという事実に関係している可能性があると考えて、モジュールを外部としてマークし、webpack ビルド ファイル内のエントリを次のように置き換えました。

/***/ },
/* 163 */
/* unknown exports provided */
/* all exports used */
/*!*************************!*\
  !*** external "argon2" ***!
  \*************************/
/***/ function(module, exports) {

eval("module.exports = require(\"argon2\");");

これでエラーなしで動作するようになりました。この外部を明確にマークすることは正しくありません (上記の変更なしではまったく機能しません)。上記のようなエントリになるように、arg2 モジュールを構成しようとしています。string_decoderこれは、 、ttyzlipおよび他のいくつかのモジュールがバンドルで定義されている方法と一致することに気付きました。

/***/ },
/* 164 */
/* unknown exports provided */
/* all exports used */
/*!*********************************!*\
  !*** external "string_decoder" ***!
  \*********************************/
/***/ function(module, exports) {

eval("module.exports = require(\"string_decoder\");...")

/***/ },
/* 165 */
/* unknown exports provided */
/* all exports used */
/*!**********************!*\
  !*** external "tty" ***!
  \**********************/
/***/ function(module, exports) {

eval("module.exports = require(\"tty\");
4

0 に答える 0