Estoy tratando de usar webpack en el backend para transpilar este código (llamado sub.js ):
export const foo1 = () => { console.log("I'm foo1"); }; console.log('loaded'); Puedo compilarlo y luego importarlo bien. Al importar ( require ) veo el 'cargado', pero el objeto importado está vacío y en particular no tiene función foo1 .
Este es mi 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', }; Mi package.json :
{ "name": "sub", "version": "1.0.0", "description": "", "main": "dist/backend.js", "scripts": { "test": "echo \"Error: no test specified\" && 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" } }Pruebo usando:
> npx webpack && 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 {}esperaba ver:
loaded {foo1: [Function]}o similar.
Encontré el problema. Aparentemente, debe declarar explícitamente las bibliotecas exportadas en la salida. Ahora que he añadido esto:
output: { path: path.resolve(__dirname, 'dist'), filename: 'backend.js', library: { type: 'commonjs-module', }, },Yo obtengo:
> npx webpack && 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] }como se esperaba.
Para referencia https://webpack.js.org/configuration/output/#outputlibrary .