Handlebars.js: Webpack + Fehler beim Lenker erforderlich

Erstellt am 26. Jan. 2016  ·  21Kommentare  ·  Quelle: handlebars-lang/handlebars.js

Ich erhalte die folgende Fehlermeldung, indem ich einfach den Require-Lenker verwende.

▶ 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 

Mein index.js

var handlebars = require('handlebars');

Mein package.json

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

Hilfreichster Kommentar

Ich habe das umgangen mit ..

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

in meiner Webpack-Konfiguration

Alle 21 Kommentare

Wie in #1102 erwähnt, Hinzufügen der Zeile
"browser": "dist/handlebars.js",
to handlebars' package.json hat dies für mich gelöst.

Klingt nach einem Problem mit Webpack, nicht nach Lenker.
Der normale Standardpfad für alle Kerndateien von Knotenmodulen ist /node_modules/module_name/dist.

Hier nimmt eine Knoten-App an, dass sie sich befinden. dies bedeutet, dass Webpack mit require() umgeht; anders als Knoten.

Ich habe das umgangen mit ..

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

in meiner Webpack-Konfiguration

danke @gilesbradshaw :+1: :lächeln:

@abhisekp wurde das gelöst? Bitte schließen, wenn ja.

@rafde Ich habe es nicht überprüft, aber dieses Problem geschlossen, da das Problem klargestellt wurde und eine klare Lösung vorgeschlagen wird.

Danke für die Erinnerung. :erröten:

Problem wird immer noch reproduziert, wenn ich irgendwo in .js Lenker benötige:

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

aber wenn ich diese Zeile entferne

var Handlebars = require('handlebars');

Problem ist weg

@gilesbradshaw
Vielen Dank!

Ich erhalte diesen Fehler auch, wenn ich Lenker mit einem Angular 2-CLI-Projekt verwende. Ich kann meine Webpack-Konfiguration nicht ändern, weil das Angular-CLI-Team beschlossen hat, Webpack-Details vor Angular-CLI-Benutzern zu verbergen, und sie das Ändern der Webpack-Konfiguration offiziell nicht unterstützen.

@oocx Sie könnten die JS-Datei einfach so aus dem Ordner node_modules importieren

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

Das funktioniert gut!

Um dies in einem eckigen 4-Projekt zum Laufen zu bringen, musste ich Folgendes tun:
import * als Lenker aus 'lenker/dist/lenker';

normalerweise würde ich das einfach so machen:
import * als handleBars aus 'lenker';

Die obige Zeile funktioniert in einem Typoskript-Projekt in Knoten gut, aber nicht in Winkel 4.

HandleBars ist das einzige Projekt, bei dem ich so importieren muss. Es macht mir Sorgen, dass ich auf der Straße ein Problem haben werde. Es sieht so aus, als ob HandleBars nicht gut mit dem Webpack von angle zusammenpasst.

Ich könnte nachsehen, ob jemand ein minimales Beispielprojekt erstellt, das das Problem reproduziert. Keine Versprechungen zum "wann"...

@swilliams-a3digital Es hilft nicht, Could not find a declaration file for module Modul 'lenker' zu deklarieren oder @types/handlebars hinzuzufügen. Wie haben Sie das gelöst?

Für andere die hier suchen

Das ist die beste Lösung die ich gefunden habe
https://github.com/valtech-nyc/brookjs/blob/master/packages/brookjs/webpack.config.js#L39 -L43
hier https://github.com/pcardune/handlebars-loader/issues/110#issuecomment -358681867

Danke an @mAAdhaTTah

UPD:

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

Dies ist verzögert.
Diese handlebars Bibliothek hätte diesen Fehler beheben sollen.
Doch sie vernachlässigen und ignorieren.

Die Problemumgehung besteht darin, Folgendes zu ersetzen:

import Handlebars from 'handlebars'

mit:

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

@catamphetamine Wenn Sie eine gute Lösung für dieses Problem haben, können Sie gerne einen Pull-Request einreichen. Solange es nichts kaputt macht, werde ich eine neue Version zusammenführen und veröffentlichen. Dinge wie const Handlebars = require('handlebars') in NodeJS und bestehende Setups mit älteren Versionen von Webpack sollten weiterhin funktionieren.

Über das "Doch sie vernachlässigen und ignorieren":

Das Problem mit dem Lenker ist, dass es nicht viele Mitstreiter gibt und ich im Moment, soweit ich sehen kann, der einzige aktive bin. Naja, mehr oder weniger aktiv. Es ist jetzt 23:26 und das ist die Zeit, zu der ich normalerweise an meinen privaten Projekten arbeite, weil ich eine Familie, einen Tagesjob und andere Hobbys habe.

Wenn Sie also "Noch sie vernachlässigen und ignorieren" schreiben, gibt es nicht viel von "sie". Es gibt mit ziemlicher Sicherheit keine "sie", die für die Arbeit an diesem Projekt bezahlt werden. Ich helfe Menschen, weil es Spaß macht, mit Menschen zu sprechen und weil es Spaß macht, Probleme zu lösen, Fehler zu beheben und Tests zu schreiben. Weil ich in einigen Projekten selbst Handlebars verwende und weil es sich gut anfühlt, ab und zu im Bühnenlicht zu stehen. Aber ich glaube nicht, dass es meine Pflicht ist , dies zu tun. Also wähle ich die Themen aus, die mir gefallen, meistens die, die schnell und klar sind.

Wenn Sie also Handlebars verwenden und ein Problem haben und niemand es lösen wird, sollten Sie vielleicht versuchen, selbst eine Lösung beizutragen.

Ich öffne das Problem aber nochmal, da es scheinbar nicht gelöst ist.

weil es sich gut anfühlt, ab und zu im Bühnenlicht zu stehen.

Ich mache OpenSource auch zum Spaß, wenn auch nicht so beliebt wie diese Bibliothek.
Und auch für ein oder zwei Zeilen in meinem Lebenslauf. Hilft, einen besseren Job zu bekommen.
Ich kann sehen, dass Sie nicht viel Gewinn daraus ziehen, anstatt nur Spaß zu haben, weil es technisch gesehen nicht Ihr Projekt ist, wie @nknapp/handlebars.js
Sie pflegen es und @wycats erhält alle Kredit- und Github-Sterne, soweit die URL-Leiste reicht.
Ok, zumindest wissen wir jetzt, dass dieses Projekt nicht mehr so ​​aktiv gepflegt wird.
Trotzdem wird es an vielen Orten (einschließlich Legacy) verwendet, denke ich.
SendGrid hat beispielsweise kürzlich "anpassbare Vorlagen" in dieser handlebars Sprache eingeführt.
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
https://github.com/sendgrid/sendgrid-nodejs/issues/221

Die mögliche Lösung wäre, das Paket in handlebars und handlebars/register aufzuteilen, wie es Babel mit seinen babel und babel/register getan hat.
Sie installieren den Hook require() , wenn sie import 'babel/register' .
Das wäre eine bahnbrechende Änderung für eine andere Hauptversion, aber ich kann sehen, dass es höchstwahrscheinlich keine solche Version geben wird.
Man könnte auch eine Datei im Root-Verzeichnis erstellen mit dem Namen core.js ( module.exports = require('handlebars/dist/cjs/handlebars') ) und dann würden Webpack-Benutzer handlebars/core anstelle von handlebars/dist/cjs/handlebars (zusammen mit einer Zeile) in der README).
Der Schöpfer von Webpack kommt ebenfalls aus Deutschland.

Wie auch immer, import Handlebars from 'handlebars/dist/cjs/handlebars' funktioniert und ich denke, Sie müssen nichts in der Bibliothek ändern, fügen Sie einfach eine Dokumentationszeile zu README hinzu, die für Webpack import Handlebars from 'handlebars/dist/cjs/handlebars' anstelle des regulären Imports verwendet.

Übrigens habe ich mich nicht speziell auf Sie bezogen, weil Sie in dieser Ausgabe zuvor keinen negativen Kommentar hinterlassen haben.
Ich bezog mich auf

Klingt nach einem Problem mit Webpack, nicht nach Lenker.

Und @rafde und sein Kommentar:

Scheint ein Problem mit Ihrem Setup zu sein, da sonst niemand dieses Problem hat

In Ihrem Kommentar wurde nicht behauptet, Webpack sei "falsch" oder so, also keine falschen Worte von Ihrer Seite:

Ich könnte nachsehen, ob jemand ein minimales Beispielprojekt erstellt, das das Problem reproduziert. Keine Versprechungen zum "wann"...

Sie haben nicht gesagt "Webpack macht es falsch, schließen Sie das Problem", also sind Ihre Kommentare in Ordnung.

@nknapp
Wie auch immer, import Handlebars from 'handlebars/dist/cjs/handlebars' funktioniert einwandfrei und ich denke, Sie müssen nichts in der Bibliothek ändern.
Fügen Sie der README-Datei vielleicht eine Zeile hinzu, die besagt: "Wenn Sie Webpack verwenden, dann import Handlebars from 'handlebars/dist/cjs/handlebars' anstelle von import Handlebars from 'handlebars' .
import Handlebars from 'handlebars/dist/cjs/handlebars' ist in Ordnung und es funktioniert.

import Handlebars from 'handlebars/dist/cjs/handlebars

Hat bei mir ab diesem Kommentar funktioniert.

Ich stimme @catamphetamine jedoch zu.

Eine bessere Dokumentation ist viel wert und es würde niemanden umbringen, diese Zeile zur Installationsseite hinzuzufügen.

Wir alle bauen großartige Dinge und möchten, dass die Leute sie nutzen.

Aber raten Sie mal, wenn die Dokumentation scheiße ist ... das Projekt tut es auch, weil niemand außer Ihnen in der Lage sein wird, es zu verstehen.

Und denken Sie daran... die Leute haben Angst vor dem, was sie nicht verstehen.

-Ende schimpfen-

Ich schätze jedoch Ihre Bemühungen um die Bibliothek.
Ein Open-Source-Entwickler zu sein ist oft eine undankbare und schmerzhafte Odyssee mit sehr wenig Belohnung.

Eigentlich versuche ich nicht, Leute dazu zu bringen, Lenker zu benutzen. Ich versuche nur, Leuten zu helfen, die sich bereits entschieden haben, es zu verwenden.

Ich baue gerade eine neue Dokumentationsseite auf (wenn ich noch etwas Zeit habe) und werde sie dort aufnehmen.

Sollte in #1102 gelöst werden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen