Handlebars.js: webpack + requiere error de manillar

Creado en 26 ene. 2016  ·  21Comentarios  ·  Fuente: handlebars-lang/handlebars.js

Recibo el siguiente error simplemente usando require manillar.

▶ webpack --display-modules   
Hash: bdb0fe35e2f8bde783e5
Version: webpack 1.12.12
Time: 116ms
         Asset     Size  Chunks             Chunk Names
bundle.main.js  2.82 kB       0  [emitted]  main
   [0] ./src/index.js 150 bytes {0} [built]
   [1] ./~/handlebars/lib/index.js 792 bytes {0} [built] [3 warnings] [3 errors]

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../dist/cjs/handlebars/compiler/printer in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 9:14-64

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve module 'fs' in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 17:11-24

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../dist/cjs/handlebars in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 7:17-50 

Mi index.js

var handlebars = require('handlebars');

Mi package.json

  "dependencies": {
    "handlebars": "^4.0.5"
  }

Comentario más útil

Lo solucioné con ...

resolve: {
    alias: {
       handlebars: 'handlebars/dist/handlebars.min.js'
    }
}

en mi configuración de paquete web

Todos 21 comentarios

Como se menciona en el n. ° 1102 agregando la línea
"browser": "dist/handlebars.js",
to handlebars 'package.json resolvió esto por mí.

Suena como un problema con Webpack, no con Handlebars.
La ruta predeterminada normal para cualquier archivo principal de módulo de nodo es / node_modules / module_name / dist.

Ahí es donde una aplicación de nodo asumirá que se encuentran; esto significa que Webpack está manejando require (); diferente al nodo.

Lo solucioné con ...

resolve: {
    alias: {
       handlebars: 'handlebars/dist/handlebars.min.js'
    }
}

en mi configuración de paquete web

gracias @gilesbradshaw : +1:: sonrisa:

@abhisekp, ¿ se resolvió esto? Por favor cierre si es así.

@rafde No lo he verificado, pero

Gracias por el recordatorio. :rubor:

El problema aún se reproduce si necesito manubrios en algún lugar de .js:

var Handlebars = require('handlebars');
Handlebars.registerHelper('greet', function(name) {
            return 'Hello, name=' + name + '!';
});

pero si quito esta linea

var Handlebars = require('handlebars');

el problema se ha ido

@gilesbradshaw
¡Muchos gracias!

También obtengo este error cuando uso manubrios con un proyecto CLI de Angular 2. No puedo cambiar la configuración de mi paquete web porque el equipo de Angular CLI decidió ocultar los detalles del paquete web a los usuarios de Angular CLI y no admiten oficialmente la modificación de la configuración del paquete web.

@oocx Puede importar el archivo JS desde la carpeta node_modules así

import 'handlebars/dist/handlebars.min.js';

¡Esto funciona bien!

Para que esto funcione en un proyecto angular 4 tuve que hacer esto:
importar * como handleBars de 'handlebars / dist / handlebars';

normalmente solo haría esto:
importar * como handleBars de 'manubrios';

La línea anterior funciona bien en un proyecto mecanografiado en nodo, pero no en angular 4.

HandleBars es el único proyecto en el que tengo que importar de esta manera. Me preocupa que voy a tener un problema en el futuro. Parece que HandleBars no funciona bien con el paquete web de angular.

Podría echar un vistazo si alguien configura un proyecto de ejemplo mínimo que reproduzca el problema. Sin embargo, no hay promesas sobre el "cuándo" ...

@ swilliams-a3digital Obtener Could not find a declaration file for module declare module 'handlebars' o agregar @ types / handlebars no ayuda. Como solucionaste esto?

Para otros que buscan aquí

Esta es la mejor solución que he encontrado.
https://github.com/valtech-nyc/brookjs/blob/master/packages/brookjs/webpack.config.js#L39 -L43
aquí https://github.com/pcardune/handlebars-loader/issues/110#issuecomment -358681867

Gracias a @mAAdhaTTah

UPD:

//fix handlebars warnings
config.resolve.alias = {
    ...config.resolve.alias,
    'handlebars/runtime': 'handlebars/dist/cjs/handlebars.runtime',
    'handlebars': 'handlebars/dist/cjs/handlebars.runtime',
};

Esto está retrasado.
Esta biblioteca handlebars debería haber solucionado este error.
Sin embargo, descuidan e ignoran.

La solución alternativa es reemplazar:

import Handlebars from 'handlebars'

con:

import Handlebars from 'handlebars/dist/cjs/handlebars'

@catamphetamine si tiene una buena solución a este problema, puede presentar una solicitud de extracción. Mientras no rompa nada, fusionaré y publicaré una nueva versión. Cosas como const Handlebars = require('handlebars') en NodeJS y las configuraciones existentes con versiones anteriores de webpack aún deberían funcionar.

Sobre el "Sin embargo, descuidan e ignoran":

El problema del manillar es que no hay muchos colaboradores y de momento, por lo que veo, soy el único activo. Bueno, más o menos activo. Son las 23:26 ahora y este es el momento en que suelo venir a trabajar en mis proyectos privados, porque tengo una familia un trabajo diurno y otras aficiones.

Entonces, cuando escribe "Sin embargo, ellos descuidan e ignoran", no hay muchos "ellos". Es casi seguro que no hay "ellos" a los que se les pague por trabajar en este proyecto. Ayudo a la gente, porque es divertido hablar con la gente y porque es divertido resolver problemas, corregir errores y escribir pruebas. Porque yo mismo estoy usando Handlebars en un par de proyectos, y porque se siente bien estar parado en la luz del escenario de vez en cuando. Pero no creo que sea mi deber hacerlo. Así que elijo los temas que me gustan, principalmente los que son rápidos y claros.

Entonces, si estás usando Handlebars y tienes un problema y nadie lo va a resolver, tal vez deberías intentar aportar una solución tú mismo.

Sin embargo, reabriré el problema porque no parece estar resuelto.

porque se siente bien pararse en la luz del escenario de vez en cuando.

También estoy haciendo código abierto para divertirme, aunque no es tan popular como esta biblioteca.
Y también para una línea o dos en mi CV. Ayuda a conseguir un mejor trabajo.
Puedo ver que no obtiene muchas ganancias en lugar de solo diversión porque técnicamente no es su proyecto, como @ nknapp / handlebars.js
Lo mantienes y @wycats obtiene todo el crédito y las estrellas de github en lo que respecta a la barra de URL.
Ok, al menos ahora sabemos que este proyecto ya no se mantiene tan activamente.
Aún así, se usa en muchos lugares (incluido el legado), supongo.
Por ejemplo, SendGrid lanzó recientemente "plantillas personalizables" usando este idioma handlebars .
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
https://github.com/sendgrid/sendgrid-nodejs/issues/221

En cuanto a la posible solución, sería dividir el paquete en handlebars y handlebars/register como hizo Babel con sus babel y babel/register .
Solo instalan el gancho require() cuando hacen import 'babel/register' .
Eso sería un cambio importante para otra versión principal, pero puedo ver que lo más probable es que no haya tal versión.
También se podría crear un archivo en la raíz llamado algo como core.js ( module.exports = require('handlebars/dist/cjs/handlebars') ) y luego los usuarios de Webpack requerirían handlebars/core lugar de handlebars/dist/cjs/handlebars (junto con una línea en el archivo README).
El creador de Webpack también es de Alemania.

De todos modos, import Handlebars from 'handlebars/dist/cjs/handlebars' funciona y creo que no necesita cambiar nada en la biblioteca, solo tal vez agregue una línea de documentación a README que para Webpack use import Handlebars from 'handlebars/dist/cjs/handlebars' lugar de la importación normal.

Por cierto, no me refería específicamente a usted porque no dejó un comentario negativo antes en este número.
Me refería a @methodbox y su comentario:

Suena como un problema con Webpack, no con Handlebars.

Y @rafde y su comentario:

Parece un problema con su configuración, ya que nadie más tiene este problema.

Su comentario no afirmó que Webpack fuera "incorrecto" ni nada, por lo que no hay palabras incorrectas de su parte:

Podría echar un vistazo si alguien configura un proyecto de ejemplo mínimo que reproduzca el problema. Sin embargo, no hay promesas sobre el "cuándo" ...

No dijiste que "Webpack lo está haciendo mal, cierra el problema", por lo que tus comentarios están bien.

@nknapp
De todos modos, import Handlebars from 'handlebars/dist/cjs/handlebars' funciona bien y creo que no necesitas cambiar nada en la biblioteca.
Quizás agregue una línea al archivo README que diga que "Si está usando Webpack, entonces import Handlebars from 'handlebars/dist/cjs/handlebars' lugar de import Handlebars from 'handlebars' .
import Handlebars from 'handlebars/dist/cjs/handlebars' está bien y funciona.

import Handlebars from 'handlebars/dist/cjs/handlebars

Me funcionó a partir de este comentario.

Sin embargo, estoy de acuerdo con

Una mejor documentación vale mucho y no mataría a nadie agregar esa línea a la página de instalación .

Todos construimos grandes cosas y queremos que la gente las use.

Pero adivina qué, si la documentación apesta ... también lo hace el proyecto porque nadie más que tú podrá entenderlo.

Y recuerde ... la gente le teme a lo que no entiende.

-end despotricar-

Sin embargo, aprecio sus esfuerzos en la biblioteca.
Ser un desarrollador de código abierto es a menudo una odisea ingrata y dolorosa con muy poca recompensa.

En realidad, no intento que la gente use Handlebars. Solo intento ayudar a las personas que ya han decidido usarlo.

Actualmente estoy construyendo un nuevo sitio de documentación (siempre que me quede algo de tiempo) y lo incluiré allí.

Debería resolverse en el n. ° 1102

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

rhariraman picture rhariraman  ·  5Comentarios

ShintaroOkuda picture ShintaroOkuda  ·  7Comentarios

sontek picture sontek  ·  3Comentarios

mattkime picture mattkime  ·  4Comentarios

stevenvachon picture stevenvachon  ·  7Comentarios