Handlebars.js: webpack + requerer erro de guiador

Criado em 26 jan. 2016  ·  21Comentários  ·  Fonte: handlebars-lang/handlebars.js

Recebo o seguinte erro simplesmente usando o guiador de requerimento.

▶ 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 

Meu index.js

var handlebars = require('handlebars');

Meu package.json

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

Comentários muito úteis

Eu resolvi isso com ..

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

na minha configuração do webpack

Todos 21 comentários

Conforme mencionado em # 1102 adicionando a linha
"browser": "dist/handlebars.js",
para o package.json do handlebars resolveu isso para mim.

Parece um problema com o Webpack, não com o Handlebars.
O caminho padrão normal para qualquer arquivo principal do módulo de nó é / node_modules / module_name / dist.

É aí que um aplicativo de nó assumirá que eles estão localizados; isso significa que o Webpack está lidando com require (); diferente do nó.

Eu resolvi isso com ..

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

na minha configuração do webpack

obrigado @gilesbradshaw : +1:: smile:

@abhisekp isso foi resolvido? Por favor, feche se sim.

@rafde Eu não verifiquei, mas encerrando este problema porque o problema foi esclarecido e uma solução clara é sugerida.

Obrigado pela lembrança. :corar:

problema ainda reproduzindo se eu exigir um guiador em algum lugar em .js:

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

mas se eu remover esta linha

var Handlebars = require('handlebars');

problema se foi

@gilesbradshaw
Muito obrigado!

Também recebo este erro ao usar barras de apoio com um projeto Angular 2 CLI. Não posso alterar a configuração do meu webpack porque a equipe do Angular CLI decidiu ocultar os detalhes do webpack dos usuários do Angular CLI e eles não suportam oficialmente a modificação da configuração do webpack.

@oocx Você poderia apenas importar o arquivo JS da pasta node_modules assim

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

Isso funciona bem!

Para fazer isso funcionar em um projeto angular 4, tive que fazer o seguinte:
importar * como guiador de 'guiador / dist / guiador';

normalmente, eu apenas faria isso:
importar * como guiador de 'guiador';

A linha acima funciona bem em um projeto de texto datilografado no nó, mas não no angular 4.

HandleBars é o único projeto onde tenho que importar assim. Isso me deixa preocupado, porque vou ter um problema no futuro. Parece que o HandleBars não combina bem com o webpack do angular.

Eu poderia dar uma olhada se alguém configurou um projeto de exemplo mínimo que reproduz o problema. Sem promessas quanto ao "quando", no entanto ...

@ swilliams-a3digital Obter Could not find a declaration file for module declarar o módulo 'guiador' ou adicionar @tipos / guiador não ajuda. Como você resolveu isso?

Para outros que procuram aqui

Esta é a melhor solução que encontrei
https://github.com/valtech-nyc/brookjs/blob/master/packages/brookjs/webpack.config.js#L39 -L43
aqui https://github.com/pcardune/handlebars-loader/issues/110#issuecomment -358681867

Obrigado 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',
};

Isso é retardado.
Esta biblioteca handlebars deveria ter corrigido este bug.
No entanto, eles negligenciam e ignoram.

A solução alternativa é substituir:

import Handlebars from 'handlebars'

com:

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

@catamphetamine se você tiver uma boa solução para esse problema, vontade para enviar uma solicitação de pull. Desde que não estrague nada, irei mesclar e publicar uma nova versão. Coisas como const Handlebars = require('handlebars') no NodeJS e configurações existentes com versões mais antigas do webpack ainda devem funcionar.

Sobre o "No entanto, eles negligenciam e ignoram":

O problema do guiador é que não tem muitos colaboradores e no momento, pelo que vejo, sou o único ativo. Bem, mais ou menos ativo. Agora são 23h26 e esta é a hora em que geralmente venho trabalhar em meus projetos particulares, porque tenho uma família, um trabalho diurno e outros hobbies.

Portanto, quando você escreve "No entanto, eles negligenciam e ignoram", não há muito "eles". É quase certo que nenhum "eles" seja pago para trabalhar neste projeto. Eu ajudo as pessoas porque é divertido conversar com as pessoas e porque é divertido resolver problemas, consertar bugs e escrever testes. Porque eu mesmo estou usando o Handlebars em alguns projetos e porque é bom estar na luz do palco de vez em quando. Mas não sinto que seja meu dever fazer isso. Então, eu escolho os problemas de que gosto, principalmente aqueles que são rápidos e claros.

Então, se você está usando o Guiador e tem um problema e ninguém vai resolvê-lo, talvez você deva tentar contribuir com uma solução sozinho.

Vou reabrir o problema, porque parece não estar resolvido.

porque é bom ficar na luz do palco de vez em quando.

Estou fazendo código aberto para me divertir também, embora não seja tão popular quanto esta biblioteca.
E também por uma ou duas linhas do meu currículo. Ajuda a conseguir um emprego melhor.
Posso ver que você não está obtendo muito lucro com isso, em vez de apenas se divertir, porque não é tecnicamente seu projeto, como @ nknapp / handlebars.js
Você o mantém e @wycats recebe todos os créditos e estrelas do github no que diz respeito à barra de URL.
Ok, pelo menos agora sabemos que este projeto não é mais mantido tão ativamente.
Ainda assim, é usado em muitos lugares (incluindo legado), eu acho.
Por exemplo, SendGrid lançou recentemente "modelos personalizáveis" usando esta linguagem handlebars .
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
https://github.com/sendgrid/sendgrid-nodejs/issues/221

Quanto à solução possível, seria dividir o pacote em handlebars e handlebars/register como Babel fez com seus babel e babel/register .
Eles apenas instalam o gancho require() ao fazer import 'babel/register' .
Isso seria uma mudança significativa para outra versão principal, mas posso ver que provavelmente não haverá tal versão.
Além disso, pode-se criar um arquivo na raiz chamado algo como core.js ( module.exports = require('handlebars/dist/cjs/handlebars') ) e, em seguida, os usuários do Webpack exigiriam handlebars/core vez de handlebars/dist/cjs/handlebars (junto com uma linha no README).
O criador do Webpack também é alemão.

De qualquer forma, import Handlebars from 'handlebars/dist/cjs/handlebars' funciona e eu acho que você não precisa mudar nada na biblioteca, apenas talvez adicione uma linha de documentação ao README que para o Webpack use import Handlebars from 'handlebars/dist/cjs/handlebars' invés da importação normal.

A propósito, não estava me referindo especificamente a você porque você não deixou um comentário negativo antes nesta edição.
Eu estava me referindo a @methodbox e seu comentário:

Parece um problema com o Webpack, não com o Handlebars.

E @rafde e seu comentário:

Parece haver um problema com sua configuração, pois ninguém mais tem esse problema

Seu comentário não afirma que o Webpack está "errado" ou qualquer coisa, então não há palavras erradas de sua parte:

Eu poderia dar uma olhada se alguém configurou um projeto de exemplo mínimo que reproduz o problema. Sem promessas quanto ao "quando", no entanto ...

Você não disse que "o Webpack está fazendo isso errado, feche o problema", portanto, seus comentários estão ok.

@nknapp
De qualquer forma, import Handlebars from 'handlebars/dist/cjs/handlebars' funciona muito bem e acho que você não precisa alterar nada na biblioteca.
Apenas talvez adicione uma linha ao README dizendo que "Se você estiver usando o Webpack, então import Handlebars from 'handlebars/dist/cjs/handlebars' vez de import Handlebars from 'handlebars' .
import Handlebars from 'handlebars/dist/cjs/handlebars' está bem e funciona.

import Handlebars from 'handlebars/dist/cjs/handlebars

Funcionou para mim a partir deste comentário.

Eu concordo com @catamphetamine embora.

Uma documentação melhor vale muito e não mataria ninguém adicionar essa linha à página de instalação .

Todos nós construímos grandes coisas e queremos que as pessoas as utilizem.

Mas adivinhe, se a documentação é uma merda ... o projeto também, porque ninguém além de você será capaz de entendê-lo.

E lembre-se ... as pessoas temem o que não entendem.

-end rant-

No entanto, agradeço seus esforços na biblioteca.
Ser um desenvolvedor de código aberto costuma ser uma odisséia ingrata e dolorosa com muito pouca recompensa.

Na verdade, não estou tentando fazer as pessoas usarem o guiador. Estou apenas tentando ajudar as pessoas que já decidiram usá-lo.

No momento, estou construindo um novo site de documentação (sempre que tiver algum tempo restante) e irei incluí-lo lá.

Deve ser resolvido em # 1102

Esta página foi útil?
0 / 5 - 0 avaliações