【问题标题】:How to make Zepto compatible with Browserify?如何使 Zepto 与 Browserify 兼容?
【发布时间】:2013-07-20 09:49:11
【问题描述】:

我对 Zepto 做了一些改动,希望可以在 Browserify 中使用:

➤➤ git diff
diff --git a/package.json b/package.json
index 294af90..e4f8fd1 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
     , "dist": "coffee make dist"
     , "start": "coffee test/server.coffee"
   }
+  , "main": "dist/zepto.js"
   , "repository": {
       "type": "git"
     , "url": "https://github.com/madrobby/zepto.git"
diff --git a/src/zepto.js b/src/zepto.js
index 93bfe18..cdf8929 100644
--- a/src/zepto.js
+++ b/src/zepto.js
@@ -787,6 +787,17 @@ var Zepto = (function() {
   return $
 })()

-// If `$` is not yet defined, point it to `Zepto`
-window.Zepto = Zepto
-'$' in window || (window.$ = Zepto)
+// detect module loader like jQuery
+// http://code.jquery.com/jquery-2.0.3.js
+if ( typeof module === "object" && module && typeof module.exports === "object" ) {
+  module.exports = Zepto;
+} else {
+  if ( typeof define === "function" && define.amd ) {
+    define( "zepto", [], function () { return Zepto; } );
+  }
+}
+if ( typeof window === "object" && typeof window.document === "object" ) {
+  window.Zepto = Zepto
+  // If `$` is not yet defined, point it to `Zepto`
+  '$' in window || (window.$ = Zepto)  
+}

但我得到了错误:

/usr/lib/node_modules/watchify/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:91
                        var dir = path.resolve(x, pkg.main);
                                                     ^
TypeError: Cannot read property 'main' of undefined
    at /usr/lib/node_modules/watchify/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:91:54
    at load (/usr/lib/node_modules/watchify/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:54:43)
    at /usr/lib/node_modules/watchify/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:60:22
    at /usr/lib/node_modules/watchify/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:16:47
    at Object.oncomplete (fs.js:107:15)

有什么解决办法吗?

【问题讨论】:

  • 当你需要 node.js 中的修改文件时它是否工作?我会先验证这是否有效。请注意,要让它在服务器端工作,您很可能必须首先创建一个global.window 变量,指向来自 JSDom 左右的窗口对象。
  • 哦,不,我还是想在浏览器中使用它。

标签: javascript zepto browserify


【解决方案1】:

您可以手动将 module.exports = window.$ 添加到 zepto 文件的底部或使用 browserify-shim 以使您的模块即时适应 browserify。

我会推荐后一个选项,因为编辑第 3 方模块是有问题的,特别是如果您打算稍后升级它们。

browserify-shim 是 tested to work with zepto in particular

花点时间研究自述文件和示例,了解如何正确设置。然后,您当然可以填充几乎任何将变量附加到全局上下文的库,即 jquery。

另一方面,由于 browserify 中的错误而导致的错误已在此期间得到修复。

【讨论】:

  • 谢谢,我tried the former 成功了。我发现很难理解 Browserify-Shim 是如何工作的。我按照之前 README 中的描述做了,但未能创建一个 Zepto 包。
  • 我犯错了吗? browserify 是用于将 jQuery 等库捆绑到一个模块中,还是每次我捆绑一整段代码时都需要它们(这意味着每次我必须修改脚本来执行此操作)?
  • browserify-shim 不会生成单独的模块。相反,它只是在将代码添加到包之前包装代码(即 zepto 的)。该包装器使其与 commonJS 兼容。此外,browserify-shim 的设计目的是为了让您不必创建自定义库来获得 commonsJS 兼容性。因此,它不是针对您在示例中所指的内容而设计的,而是不必这样做;)
  • 知道了。谢谢,我现在就结束这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2019-10-27
  • 2015-05-31
  • 1970-01-01
相关资源
最近更新 更多