Usando RequireJS Map Config com Text Plugin

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 .htmlaí. 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.