Я провел некоторое время, изучая это и экспериментируя, и я уверен, что мог бы что-то взломать, чтобы оно заработало, но я предпочел бы понять, что я делаю неправильно.
Это хорошо известный что jQuery Mobile ненавидит красиво играть.
Тем не менее, куда бы я ни посмотрел, виновник один и тот же: у jQuery Mobile есть IIFE, который выглядит примерно так:
(function($, window){
// code
})(jQuery, this)
При загрузке в Node (вместо браузера) this
устанавливается неправильно и не удается связать модуль
Моя проблема отличается
Я установил jQuery Mobile следующим образом:
npm install --save-dev jquery-mobile
Затем я попытался включить его в свой JavaScript следующим образом:
window.$ = window.jQuery = require('jquery');
$.mobile = require('jquery-mobile');
Это вызвало ошибку:
Module not found: Error: Can't resolve 'load-grunt-config' in '/home/sbarnett/test/node_modules/jquery-mobile'
Примечание. Это не имеет ничего общего с тем, что $
не определено, или с чем-то неправильным в контексте this
. Он буквально даже не пытался загрузить jquery-mobile, прежде чем искать Grunt... по какой-то причине?
Из того, что я могу сказать, изучая онлайн и просто имея общее представление о NPM и о том, как обычно размещаются модули, внутри ./node_modules/jquery-mobile
должна быть папка «dist». Нет такой папки.
Похоже, что я получил исходный код jQuery Mobile вместо скомпилированной версии. Я привык находить минимизированный файл javascript в папке «dist», а здесь такого нет.
Основываясь на том, что я вижу, и ошибках, которые я получаю, я попытался перейти в каталог jQuery Mobile и запустить grunt
. Конечно, я знаю, что это плохая практика, потому что вы никогда не должны трогать свою папку node_modules
. В любой момент времени rm -rf node_modules
и npm install
должны быть в безопасности, чтобы вернуть его.
Несмотря на наличие Gruntfile.js
, я получил следующую ошибку:
Fatal error: Unable to find local grunt.
Итак, у меня есть несобранная версия jQuery Mobile, устанавливаемая NPM, и я не могу ее собрать.