当我使用 browserify-rails 需要它时,formsy-react npm 模块会破坏 rails 应用程序

formsy-react npm module breaks rails app when I require it using browserify-rails

我有 rails/sprockets 和 browserify 的组合,这确实使调试变得复杂。看来我对 formsy-react 而不是其他模块有问题。

这个有效:

//= require mysprocketslibs
window.mymodule = require('mymodule');
mymodule.simplefn();

(我写了一个基本模块来测试这个,另一个不同的第三方模块也能工作)

但是当我在 rails 应用程序的 JS 中需要 formsy-react 时出现错误:

Uncaught TypeError: Cannot read property '0' of undefined

有问题的行是 browserify 在函数中用 require 包装代码的地方:

},{}],"/Users/me/myproject/node_modules/formsy-react/node_modules/form-data-to-object/index.js":[
function(require,module,exports){
arguments[4]["/Users/me/myproject/node_modules/formsy-react-components/node_modules/formsy-react/node_modules/form-data-to-object/index.js"][0].apply(exports,arguments)
},

换句话说,浏览器认为 arguments[4][...form-data-to-object/index.js] 是未定义的。

文件 index.js 存在于该路径指向的文件系统中。

package.json:

{
   "name": "myproject",
   "private": true,
   "dependencies": {
     "browserify": "~> 10.2.4",
     "browserify-incremental": "^3.0.1",
     "formsy-react": "^0.17.0",
     "react": "^0.14.0",
     "mymodule": "1.0.0"
   },
   "engines": {
      "node": ">= 0.10"
   }
 }

我怀疑这是 formsy-react 问题,因为肯定有人会遇到这个问题,因为它是在第一次需要模块时立即遇到的。

问题是 browserify-rails 缓存依赖项,而我的 application.js 仍然引用以前卸载的模块。在这种情况下 formsy-react-components 我应该在上面的违规行中发现。

由 运行 rake tmp:cache:clear 修正。