【问题标题】:How to "remove"/"change" some require(...) calls when using browserify?使用 browserify 时如何“删除”/“更改”一些 require(...) 调用?
【发布时间】:2015-06-21 14:59:55
【问题描述】:

我有一个用 node.js 编写的应用程序,它需要一些 npm 模块(react、react-router 和其他)。当我在其上运行 browserify 时,所有 npm 模块都被“注入”到 bundle.js 文件中。我想要的是为 bower 提供分发,它不会在 bundle.js 文件中包含 react 和 react-router 依赖项,因为它们可以在 bower.json 中作为依赖项引用。

app.js:

var React = require('react')
React.render(...)

在 bundle.js 中 react 与 app.js 一起被注入

我需要不包含 react 并假定它在全局(窗口)范围内可用的 bundle.js。

bundle.js:

React.render(...)

或类似的东西:

var require = function(name){ return window[name] }
var React = require('react')
React.render(...)

所以基本上我想告诉 browserify 一些模块可以在 window 范围内找到并且不必注入到 bundle.js...

【问题讨论】:

  • 不确定是否有办法直接使用 Browserify 配置,但包 browserify-shim 似乎可以处理您的用例。
  • 嘿,我无法让它与 browserify-shim 一起工作,但是我发现这个模块 browserify-global-shim 只是替换了指定的模块需要 (require('XXX') => window.XXX)
  • @user606521 多亏了你,我的问题在这里得到了解决,伙计!谢谢! stackoverflow.com/questions/34681058/…

标签: javascript node.js browserify


【解决方案1】:

使用-x [Module Name] 从包中排除节点模块。

browserify -d -x react -x react-router app.js > bundle.js

【讨论】:

  • 你知道如何使用代码中的 -x 选项(不是 cli)吗?我在文档中找不到相应的 browserify 选项...
  • 对不起,我不知道,如何从代码中使用它。但是为什么你需要让这些模块全球化呢?您可以将它们捆绑到一个单独的文件中。
  • 可以检查模块是否存在。 var React = require('react');。如果找不到模块,React 将是未定义的。
  • 我想让我的包凉亭可用。在 bower 中,您只需在 bower.json 中键入依赖项,而不是将它们与您自己的库代码捆绑在一起。
猜你喜欢
  • 2017-09-04
  • 2015-04-26
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
相关资源
最近更新 更多