Um dos meus projetos atuais de aluguel é construído com Backbone e RequireJS. Precisávamos da capacidade de compilações de cliente do aplicativo para substituir módulos individuais por sua própria versão personalizada. A configuração do mapa de Require é um ajuste natural:
map: {
'*': {
'views/foo': 'client/views/foo'
}
}
Mas me deparei com um obstáculo ao tentar fazer esta substituição de mapa com modelos usando o plugin de texto .
map: {
'*': {
'templates/foo': 'text!client/templates/foo.html'
}
}
// In the module...
define('templates/foo', function(template) { ... });
Isso produz erros 404 conforme o carregador tenta carregar baseURL/text!client/templates/foo.html.js
. Em retrospecto, este resultado mostra como o sistema de plugins funciona com Require, mas peguei o caminho mais difícil e tentei todos os tipos de combinações para fazer o mapeamento funcionar. Mova-se text!
aqui. Largue .html
aí. No final, a resposta é:
map: {
'*': {
'templates/foo': 'client/templates/foo.html'
}
}
// In the module...
define('text!templates/foo', function(template) { ... });
O identificador do plugin ( text!
) deve ser incluído nos próprios módulos, seguido pela chave do mapa. Isso faz sentido. Require analisa primeiro o identificador de plug-in do nome do módulo, antes que o mapeamento ocorra.
Esperançosamente, essa dica pode poupar alguns minutos de raciocínio de outra pessoa.