Webpack на серверной части: отсутствует экспорт

#javascript #node.js #webpack

#javascript #node.js #webpack

Вопрос:

Я пытаюсь использовать webpack на серверной части для переноса этого кода (вызывается sub.js ):

 export const foo1 = () => {
  console.log("I'm foo1");
};

console.log('loaded');
 

Я могу скомпилировать его, а затем импортировать его нормально. При импорте ( require ) Я вижу «загруженный», но импортированный объект пуст и, в частности, не имеет функции foo1 .

Это мой webpack.config.js:

 const path = require('path');
const webpack = require('webpack');

module.exports = {
  entry: `./sub.js`,
  module: {
    rules: [{
      test: /.(js|jsx)$/,
      exclude: /node_modules/,
      loader: 'babel-loader',
      options: {
        plugins: [
          '@babel/plugin-proposal-class-properties'
        ]
      },
    }],
  },
  resolve: {
    extensions: ['*', '.js', '.jsx'],
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'backend.js'
  },
  mode: 'production',
};
 

Мой package.json :

 {
  "name": "sub",
  "version": "1.0.0",
  "description": "",
  "main": "dist/backend.js",
  "scripts": {
    "test": "echo "Error: no test specified" amp;amp; exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.13.8",
    "@babel/plugin-proposal-class-properties": "^7.13.0",
    "@babel/preset-env": "^7.13.9",
    "@babel/preset-react": "^7.12.10",
    "babel-loader": "^8.2.2",
    "webpack": "^5.65.0",
    "webpack-cli": "^4.9.1"
  }
}
 

Я тестирую с помощью:

 > npx webpack amp;amp; node --eval "r = require('./dist/backend.js'); console.log(r);"
asset backend.js 45 bytes [emitted] [minimized] (name: main)
runtime modules 396 bytes 2 modules
./sub.js 204 bytes [built] [code generated]
webpack 5.65.0 compiled successfully in 250 ms
loaded
{}
 

Я ожидал увидеть:

 loaded
{foo1: [Function]}
 

или аналогичный.

Комментарии:

1. Разве вы не должны использовать export with import вместо require ?

2. нет, здесь это не имеет значения.

Ответ №1:

Обнаружена проблема. По-видимому, вам нужно явно объявить экспортируемые библиотеки в выходных данных. Теперь, когда я добавил это:

   output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'backend.js',
    library: {
        type: 'commonjs-module',
    },
  },
 

Я получаю:

 > npx webpack amp;amp; node --eval "r = require('./dist/backend.js'); console.log(r);"
asset backend.js 192 bytes [emitted] [minimized] (name: main)
./sub.js 323 bytes [built] [code generated]
webpack 5.65.0 compiled successfully in 275 ms
loaded
{ foo1: [Function] }
 

как и ожидалось.

Для справки https://webpack.js.org/configuration/output/#outputlibrary .