2013-07-21 34 views
0

我做了一些改動的Zepto,希望我能在Browserify使用它:如何讓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) 

有沒有什麼解決辦法嗎?

+0

當你需要修改node.js中的文件時,它能工作嗎?我首先會驗證它是否有效。注意,爲了讓它在服務器端工作,你很可能必須首先創建一個'global.window'變量,從JSDom指向窗口對象等等。 –

+0

哦,不,我仍然想在瀏覽器中使用它。 – jiyinyiyong

回答

2

您可以手動將module.exports = window.$添加到zepto文件的底部,或使用browserify-shim以便讓您的模塊適用於瀏覽器。

因爲編輯第三方模塊有問題,我會推薦後者的選項,特別是如果您打算稍後升級它們。

browserify-shim是tested to work with zepto in particular

花點時間研究自述文件和示例,以瞭解如何正確設置事項。那麼當然,你可以填充任何將變量附加到全局上下文中的庫,即jQuery。

另一方面,由於在此期間已修復的browserify中的錯誤,您所得到的錯誤。

+0

謝謝,我[嘗試前](https://github.com/jiyinyiyong/zepto-browserify#zepto-browserify),它的工作。我發現很難理解Browserify-Shim是如何工作的。我按照自述文件中所述的方式完成,但未能創建一個Zepto包。 – jiyinyiyong

+0

我犯過錯嗎? browserify用於將jQuery等庫捆綁到一個模塊中,或者每次捆綁整段代碼時都需要它們(這意味着每次我必須修改腳本來完成此操作)? – jiyinyiyong

+1

browserify-shim不會生成單獨的模塊。相反,它只是在代碼(即zepto)被添加到包之前包裝它。該包裝使它commonJS compat。此外,browserify-shim的設計使您不必爲了獲得commonsJS兼容性而創建自定義庫**。所以它不是爲你的例子中所指的,而是爲了不必這樣做;) –