Separando jQuery Mobile (1.1.0) da AMD (RequireJS)
-
15-11-2019 - |
Pergunta
Estou tentando incluir o jQuery Mobile em um projeto que usa RequireJS para AMD, porém, não quero carregar o jQuery Mobile como um módulo AMD.A ideia por trás disso é que usaremos AMD para lógica específica de aplicativo, mas quaisquer dependências de bibliotecas externas, como jQuery, serão trazidas para o escopo global apenas definindo manualmente as tags de script.
O problema que estou tendo é definir uma tag de script para jQuery mobile antes que a tag de script RequireJS pareça fazer com que o RequireJS defina um módulo anônimo e crie um conflito que não entendo.Examinei o código jQuery e jQuery Mobile e eles estão configurados para chamar condicionalmente o define()
método se existir.Como estou incluindo essas tags antes do carregamento do RequireJS, elas não deveriam estar chamando define()
.Eu verifiquei isso com pontos de interrupção e eles realmente não o fazem.
Quando incluo o jQuery Mobile, recebo o seguinte erro:
Error: Mismatched anonymous define() module: [object Object]
Não entendo como isso acontece se o jQuery Mobile não está ligando define()
.O que estou fazendo de errado aqui?Isso é algo relacionado ao novo suporte AMD condicional do jQuery Mobile?
Solução
Para confirmar, você deve usar a versão construída do jQuery mobile e incluí-la antes da tag require.js assim - observe que o jquery está incluído como uma tag de script, já que o jQuery mobile depende dele:
<script src="scripts/jquery.js"></script>
<script src="scripts/jquery.mobile.js"></script>
<script src="scripts/require.js" data-main="scripts/app"></script>
Espero que isso funcione.O erro que você vê pode ser gerado se você tiver scripts como este:
<script src="scripts/require.js" data-main="scripts/app"></script>
<script src="scripts/jquery.js"></script>
<script src="scripts/jquery.mobile.js"></script>
Considero isso mais um problema com o RequireJS, não com o jQuery mobile, algo que quero corrigir para o RequireJS 1.1.Mas o primeiro conjunto de tags de script deve funcionar.
Caso contrário, seria interessante saber mais como o módulo JS do seu aplicativo usa jQuery e jQuery mobile.