jQuery Mobile,NPM和WebPack的问题

我已经花了一段时间研究这个实验,并且我确信我可以一起破解一些东西,但是我宁愿明白我做错了什么

众所周知 , jQuery Mobile 讨厌玩。

然而,在我看来,罪魁祸首是相同的:jQuery Mobile有一个IIFE,看起来像这样:

(function($, window){ // code })(jQuery, this) 

当加载到节点(而不是浏览器)时, 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' 

注意:这与$ undefined没有任何关系,或者this上下文有什么问题。 它从字面上甚至没有尝试加载jquery移动之前寻找咕噜…出于某种原因?

从我所知道的,在网上进行研究,只是对NPM有一个基本的了解以及模块是如何布局的,在./node_modules/jquery-mobile里应该有一个“dist”文件夹。 没有这样的文件夹。

jQuery Mobile目录

它几乎看起来像我得到了jQuery Mobile的源代码,而不是编译的版本。 我习惯于在“dist”文件夹中find缩小的JavaScript文件,这里没有这个东西。

根据我所看到的和我得到的错误,我尝试去jQuery Mobile目录并运行grunt 。 当然,我知道这是不好的做法,因为你不应该碰到你的node_modules文件夹。 在任何时候, rm -rf node_modulesnpm install应该是安全的。

尽pipe存在一个Gruntfile.js我得到了以下错误:

 Fatal error: Unable to find local grunt. 

所以我有一个由NPM安装的非构build版本的jQuery Mobile,我无法构build它。

又过了一天,我回到这里,做了一些窥探,发现了这个问题。

当我跑时:

 npm install --save-dev jquery-mobile 

NPM默认安装1.5.0-alpha.1

这个版本仍然是alpha,所以它不是默认的。 看起来,我正在接收未构build的源代码,没有dist文件夹。

不过还有第二个问题。 将我的package.json更新为:

 // ... "jquery-mobile": "^1.4.0", // ... 

我开始得到新的错误,但jQuery Mobile不支持jQuery 3.0(在运行npm install --save-dev jquery默认npm install --save-dev jquery )。 所以我不得不在package.json中回滚我的jQuery版本

然后还有第三个问题:每个人都经历过的共同问题。 Webpack和Browserify不适当地构buildjQuery Mobile,因为写入的IIFE写得不好。 这可以通过使用jquery-mobile-babel-compatible或使用imports-loader ,根据这个StackOverflow文章

或者,如果您必须使用jQuery 3并且想要使用jQuery Mobile 1.5 alpha,则可以直接从他们的网站下载缩小的版本,并将其包含在应用程序的javascript文件夹中(而不是使用NPM来pipe理它)。