Как сделать 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)

Есть ли решение?


person jiyinyiyong    schedule 21.07.2013    source источник
comment
Это работает, когда вам требуется измененный файл в node.js? Я бы сначала проверил, работает ли это. Обратите внимание, что для того, чтобы заставить его работать на стороне сервера, вам, скорее всего, придется сначала создать переменную global.window, указывающую на объект окна из JSDom или около того.   -  person Myrne Stol    schedule 22.07.2013
comment
О, нет, я все еще хочу использовать его в браузере.   -  person jiyinyiyong    schedule 31.08.2013


Ответы (1)


Вы можете вручную добавить module.exports = window.$ в конец файла zepto или использовать browserify-shim, чтобы получить ваши модули адаптированы для просмотра на лету.

Я бы рекомендовал последний вариант, поскольку редактирование сторонних модулей проблематично, особенно если вы планируете обновить их позже.

browserify-shim был протестирован для работы, в частности, с zepto .

Найдите минутку, чтобы изучить файл readme и примеры, чтобы узнать, как правильно все настроить. Затем вы, конечно, можете заменить практически любую библиотеку, которая прикрепляет переменную к глобальному контексту, то есть jquery.

С другой стороны, ошибки, которые вы получили из-за ошибки в браузере, которая была исправлена ​​к тому времени.

person Thorsten Lorenz    schedule 31.08.2013
comment
Спасибо, я попробовал первый, и это сработало. Мне было довольно сложно понять, как работает Browserify-Shim. Я сделал, как было описано в README ранее, но не смог создать пакет Zepto. - person jiyinyiyong; 31.08.2013
comment
Я сделал ошибки? Используется ли browserify для объединения библиотек, таких как jQuery, в модуль, или они просто требуются каждый раз, когда я связываю целый фрагмент кода (что означает, что каждый раз, когда я должен изменить скрипт для этого)? - person jiyinyiyong; 31.08.2013
comment
browserify-shim не создает отдельный модуль. Вместо этого он просто оборачивает код (т. е. zepto) до того, как он будет добавлен в пакет. Эта оболочка делает его совместимым с commonJS. Кроме того, browserify-shim был разработан таким образом, чтобы вам не приходилось создавать собственные библиотеки только для того, чтобы получить совместимость с commonsJS. Так что это сделано не для того, о чем вы говорите в своем примере, а для того, чтобы этого не делать;) - person Thorsten Lorenz; 31.10.2013
comment
Понятно. Спасибо, и я закрою этот вопрос сейчас. - person jiyinyiyong; 01.11.2013