Handlebars.js: webpack + nécessite une erreur de guidon

Créé le 26 janv. 2016  ·  21Commentaires  ·  Source: handlebars-lang/handlebars.js

J'obtiens l'erreur suivante simplement en utilisant le guidon require.

▶ 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 

Mon index.js

var handlebars = require('handlebars');

Mon package.json

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

Commentaire le plus utile

J'ai contourné ça avec ..

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

dans ma configuration webpack

Tous les 21 commentaires

Comme mentionné dans #1102 en ajoutant la ligne
"browser": "dist/handlebars.js",
au package.json du guidon a résolu ce problème pour moi.

Cela ressemble à un problème avec Webpack, pas avec Handlebars.
Le chemin par défaut normal pour tous les fichiers principaux du module de nœud est /node_modules/module_name/dist.

C'est là qu'une application de nœud supposera qu'ils se trouvent ; cela signifie que Webpack gère require(); différemment du nœud.

J'ai contourné ça avec ..

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

dans ma configuration webpack

merci @gilesbradshaw :+1: :sourire:

@abhisekp était-ce résolu ? Merci de fermer si oui.

@rafde Je ne l'ai pas vérifié mais je ferme ce problème car le problème a été clarifié et une solution claire est suggérée.

Merci pour le rappel. :rougir:

problème de reproduction toujours si j'ai besoin d'un guidon quelque part dans .js :

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

mais si je supprime cette ligne

var Handlebars = require('handlebars');

le problème est parti

@gilesbradshaw
Merci beaucoup!

J'obtiens également cette erreur lors de l'utilisation de guidons avec un projet CLI Angular 2. Je ne peux pas modifier la configuration de mon webpack car l'équipe Angular CLI a décidé de masquer les détails du webpack des utilisateurs Angular CLI et ils ne prennent pas officiellement en charge la modification de la configuration du webpack.

@oocx Vous pouvez simplement importer le fichier JS du dossier node_modules comme ceci

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

Cela fonctionne bien !

Pour que cela fonctionne dans un projet angulaire 4, je devais faire ceci:
importer * en tant que handleBars depuis 'handlebars/dist/handlebars' ;

normalement je ferais ça :
importer * en tant que handleBars depuis 'handlebars' ;

La ligne ci-dessus fonctionne bien dans un projet dactylographié en nœud, mais pas en angulaire 4.

HandleBars est le seul projet où je dois importer comme ça. Cela me fait craindre d'avoir un problème sur la route. Il semble que HandleBars ne fonctionne pas bien avec le webpack d'angular.

Je pourrais jeter un œil si quelqu'un met en place un exemple de projet minimal qui reproduit le problème. Aucune promesse quant au "quand", cependant...

@swilliams-a3digital Obtenir Could not find a declaration file for module declare module 'handlebars' ou ajouter @types/handlebars n'aide pas. Comment avez-vous résolu cela ?

Pour ceux qui cherchent ici

C'est la meilleure solution que j'ai trouvé
https://github.com/valtech-nyc/brookjs/blob/master/packages/brookjs/webpack.config.js#L39 -L43
ici https://github.com/pcardune/handlebars-loader/issues/110#issuecomment-358681867

Merci à @mAAdhaTTah

UPD :

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

C'est retardé.
Cette bibliothèque handlebars devrait avoir corrigé ce bogue.
Pourtant, ils négligent et ignorent.

La solution de contournement consiste à remplacer :

import Handlebars from 'handlebars'

avec:

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

@catamphetamine si vous avez une bonne solution à ce problème, vous pouvez déposer une pull request. Tant que cela ne casse rien, je fusionnerai et publierai une nouvelle version. Des choses comme const Handlebars = require('handlebars') dans NodeJS et les configurations existantes avec les anciennes versions de webpack devraient toujours fonctionner.

À propos du « Pourtant, ils négligent et ignorent » :

Le problème avec les guidons c'est qu'il n'y a pas beaucoup de collaborateurs et pour le moment, à ce que je sache, je suis le seul actif. Enfin, plus ou moins actif. Il est 23h26 maintenant et c'est l'heure à laquelle je viens habituellement travailler sur mes projets privés, car j'ai une famille, un travail de jour et d'autres loisirs.

Donc, quand vous écrivez "Pourtant, ils négligent et ignorent", il n'y a pas beaucoup de "ils". Il n'y a presque certainement aucun « eux » qui est payé pour travailler sur ce projet. J'aide les gens, parce que c'est amusant de parler aux gens et parce que c'est amusant de résoudre des problèmes, de corriger des bogues et d'écrire des tests. Parce que j'utilise moi-même des guidons dans quelques projets, et parce que ça fait du bien de se tenir debout sous la lumière de la scène de temps en temps. Mais je ne pense pas que ce soit mon devoir de le faire. Je choisis donc les problèmes que j'aime, principalement ceux qui sont rapides et clairs.

Donc, si vous utilisez des guidons et que vous avez un problème et que personne ne va le résoudre, vous devriez peut-être essayer de contribuer vous-même à une solution.

Je vais rouvrir le problème, car il ne semble pas être résolu.

parce que ça fait du bien de se tenir de temps en temps sous la lumière de la scène.

Je fais aussi de l'opensource pour le plaisir, mais pas aussi populaire que cette bibliothèque.
Et aussi pour une ligne ou deux dans mon CV. Aide à trouver un meilleur travail.
Je peux voir que vous n'en tirez pas beaucoup de profit plutôt que de vous amuser car ce n'est pas techniquement votre projet, comme @nknapp/handlebars.js
Vous le maintenez et @wycats obtient tout le crédit et les étoiles github en ce qui concerne la barre d'URL.
Ok, au moins maintenant nous savons que ce projet n'est plus aussi activement maintenu.
Pourtant, il est utilisé dans de nombreux endroits (y compris l'héritage), je suppose.
Par exemple, SendGrid a récemment lancé des « modèles personnalisables » en utilisant ce langage handlebars .
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
https://github.com/sendgrid/sendgrid-nodejs/issues/221

Quant à la solution possible, il s'agirait de diviser le package en handlebars et handlebars/register comme Babel l'a fait avec leurs babel et babel/register .
Ils n'installent le crochet require() qu'en faisant import 'babel/register' .
Ce serait un changement décisif pour une autre version majeure, mais je peux voir qu'il n'y aura probablement pas de telle version.
On pourrait également créer un fichier à la racine appelé quelque chose comme core.js ( module.exports = require('handlebars/dist/cjs/handlebars') ), puis les utilisateurs de Webpack auraient besoin de handlebars/core au lieu de handlebars/dist/cjs/handlebars (avec une ligne dans le README).
Le créateur de Webpack est également originaire d'Allemagne.

Quoi qu'il en soit, import Handlebars from 'handlebars/dist/cjs/handlebars' fonctionne et je pense que vous n'avez pas besoin de changer quoi que ce soit dans la bibliothèque, ajoutez peut-être simplement une ligne de documentation à README qui, pour Webpack, utilise import Handlebars from 'handlebars/dist/cjs/handlebars' au lieu de l'importation normale.

Soit dit en passant, je ne faisais pas spécifiquement référence à vous parce que vous n'avez pas laissé de commentaire négatif auparavant dans ce numéro.
Je faisais référence à @methodbox et à son commentaire :

Cela ressemble à un problème avec Webpack, pas avec Handlebars.

Et @rafde et son commentaire :

Cela semble être un problème avec votre configuration car personne d'autre n'a ce problème

Votre commentaire n'a pas prétendu que Webpack était "faux" ou quoi que ce soit, donc pas de mauvais mots de votre part :

Je pourrais jeter un œil si quelqu'un met en place un exemple de projet minimal qui reproduit le problème. Aucune promesse quant au "quand", cependant...

Vous n'avez pas dit que "Webpack le fait mal, fermez le problème", donc vos commentaires sont ok.

@nknapp
Quoi qu'il en soit, import Handlebars from 'handlebars/dist/cjs/handlebars' fonctionne très bien et je pense que vous n'avez pas besoin de changer quoi que ce soit dans la bibliothèque.
Ajoutez peut-être simplement une ligne au fichier README indiquant que "Si vous utilisez Webpack, alors import Handlebars from 'handlebars/dist/cjs/handlebars' au lieu de import Handlebars from 'handlebars' .
import Handlebars from 'handlebars/dist/cjs/handlebars' c'est bien et ça marche.

import Handlebars from 'handlebars/dist/cjs/handlebars

A travaillé pour moi à partir de ce commentaire.

Je suis d'accord avec @catamphetamine cependant.

Une meilleure documentation vaut beaucoup et cela ne tuerait personne d'ajouter cette ligne à la page d'installation .

Nous construisons tous de grandes choses et voulons que les gens les utilisent.

Mais devinez quoi, si la documentation est nulle... le projet aussi parce que personne d'autre que vous ne pourra le comprendre.

Et rappelez-vous... les gens craignent ce qu'ils ne comprennent pas.

-fin de la diatribe-

J'apprécie cependant vos efforts sur la bibliothèque.
Être un développeur open source est souvent une odyssée ingrate et douloureuse avec très peu de récompense.

En fait, je n'essaie pas d'inciter les gens à utiliser des guidons. J'essaie juste d'aider les gens qui ont déjà décidé de l'utiliser.

Je construis actuellement un nouveau site de documentation (chaque fois qu'il me reste du temps) et je l'y inclurai.

Devrait être résolu en #1102

Cette page vous a été utile?
0 / 5 - 0 notes