He encontrado un error al usar la última versión de Webpack (5.1.0). Parece que la configuración arroja un error porque el esquema de validación es demasiado restrictivo. Aquí está mi archivo de configuración de paquete web en esencia, y el mensaje de error que estoy viendo.
Webpack.config.js
https://gist.github.com/adarshbhat/3ec5950b66b78102da0cf46e51a3d633
Error
[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema. - configuration.node should be one of these: false | object { __dirname?, __filename?, global? } -> Include polyfills or mocks for various node stuff. Details: * configuration.node has an unknown property 'module'. These properties are valid: object { __dirname?, __filename?, global? } -> Options object for node compatibility features. * configuration.node has an unknown property 'net'. These properties are valid: object { __dirname?, __filename?, global? } -> Options object for node compatibility features. * configuration.node has an unknown property 'fs'. These properties are valid: object { __dirname?, __filename?, global? } -> Options object for node compatibility features. npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! jstest@1.0.0 start: `webpack serve` npm ERR! Exit status 2Estoy intentando usar una biblioteca generadora de analizadores (antlr4) que funciona tanto en un entorno Node.js como en navegadores. Parece que el código de la biblioteca requiere objetos globales como fs, y si está vacío, asume que está en un entorno de navegador. Según la documentación de Antlr4 y la de Webpack , este es un archivo de configuración compatible. Pero no está funcionando. Por favor ayuda.
Versiones
Actualización (29 de octubre de 2020)
La documentación de Antlr JavaScript ahora se ha actualizado con la nueva configuración para Webpack 5
Logré hacer que esto funcionara con la ayuda del equipo de Webpack. Ya no se admite el uso de la siguiente configuración de paquete web recomendada por la documentación de antlr4.
No funciona
{ node: { fs: 'empty', module: 'empty', net: 'empty' } }Configuración de trabajo
{ resolve: { fallback: { fs: false } } }Con esto, pude hacer funcionar mi analizador de JavaScript.
Tenga en cuenta que hay un esfuerzo continuo para actualizar antlr4 para generar código basado en ES6. Esta configuración puede no ser necesaria en el futuro.
Lo suficientemente interesante, recibo en el caso de path (pero no con file ) el siguiente mensaje, más claro de la CLI del paquete web:
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default. This is no longer the case. Verify if you need this module and configure a polyfill for it. If you want to include a polyfill, you need to: - add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }' - install 'path-browserify' If you don't want to include a polyfill, you can use an empty module like this: resolve.fallback: { "path": false }Sin embargo, me parece que esta información también debería encontrarse aquí, y eliminó la declaración de que cualquier módulo integrado se puede usar como propiedad allí: https://webpack.js.org/configuration/node/#node
Exactamente para Rails webpacker, si lo está utilizando, la solución debería ser:
Dentro de cualquiera de config/webpack/*.js que usa la configuración personalizada simple (consulte https://github.com/rails/webpacker#webpack-configuration para obtener más información), simplemente agregue el código que resuelve y elimina la propiedad del nodo.
const { environment } = require('@rails/webpacker') const customConfig = { resolve: { fallback: { dgram: false, fs: false, net: false, tls: false, child_process: false } } }; environment.config.delete('node.dgram') environment.config.delete('node.fs') environment.config.delete('node.net') environment.config.delete('node.tls') environment.config.delete('node.child_process') environment.config.merge(customConfig); module.exports = environmentMe encontré con el mismo problema mientras trabajaba con Next js, busqué diferentes soluciones como webpack5: false o fs: false , pero eso no funcionó para mí.
config.node = { // fs: 'empty' global: true, __filename: true, __dirname: true, }esto funcionó para mí, porque en webpack 3.0.0, la opción de nodo puede establecerse en falso para desactivar completamente NodeStuffPlugin, ya que estamos trabajando en JS y especialmente en Next-JS que requiere Node-JS, por lo que no No tengo que apagarlo por completo porque, si bien es 'falso', el Webpack no tocaría su código '__filename' y su código '__dirname'.
Cualquier corrección u orientación será apreciada, gracias
Si alguien se enfrenta a este error en Next JS, encontré la solución al deshabilitar el paquete web 5, que está configurado de forma predeterminada.
desactívelo por webpack5: false en next.config.js