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的源代码,而不是编译的版本。 我习惯于在“dist”文件夹中find缩小的JavaScript文件,这里没有这个东西。
根据我所看到的和我得到的错误,我尝试去jQuery Mobile目录并运行grunt
。 当然,我知道这是不好的做法,因为你不应该碰到你的node_modules
文件夹。 在任何时候, rm -rf node_modules
和npm 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理它)。