【发布时间】:2015-05-27 04:20:07
【问题描述】:
我正在使用Browserify 捆绑ReactJS 应用程序。
我所有的组件在顶部都包含一个require("react")。这会导致Browserify 在我的包中包含ReactJS 源。但我想排除它。
我该怎么做?这是正确的做法吗?
【问题讨论】:
标签: javascript reactjs browserify
我正在使用Browserify 捆绑ReactJS 应用程序。
我所有的组件在顶部都包含一个require("react")。这会导致Browserify 在我的包中包含ReactJS 源。但我想排除它。
我该怎么做?这是正确的做法吗?
【问题讨论】:
标签: javascript reactjs browserify
听起来你想使用browserify-shim。
在你的package.json
"browserify-shim": {
"react": "global:React"
},
"browserify": {
"transform": [ "browserify-shim" ]
},
"dependencies": {
"browserify-shim": "~3.2.0"
}
(未经测试)。 This section 有更多信息。
【讨论】:
@NickTomlin 给出了这个答案,但随后将其删除。
你可以使用external:
browserify --external react src.js > dest.js
一个使用api的例子:
var bundler = browserify('src.js');
bundler.external('react');
bundler.bundle();
这是一个可行的选择。 external 需要另一个脚本以兼容的方式提供模块。您可以像这样生成这样的脚本:
browserify -r react > react.js
env NODE_ENV=production browserify -r react | uglifyjs -m > react.min.js
在 HTML 中:
<script src="react.js"></script>
<script src="dest.js"></script>
dest.js 是你的代码,除了 react。 react.js 只是 react 及其依赖项。
需要更多外部的东西吗?只需将它们添加到反应之外。
browserify -x react -x react-bootstrap src.js > dest.js
browserify -r react -r react-bootstrap > vendor.js
你也可以在 package.json 中做这样的事情
"browser": {"react": "./react-fake.js"}
// ./react-fake.js
try {
module.exports = require('react');
} catch(e){
module.exports = window.React;
}
并使用-x react 编译。这允许您接受 -r react 构建,并回退到全局 React。
【讨论】:
browser 只是一个转换,所以它不适用于你的 node_modules。因此,如果您有任何引用 react 的 node_modules 库,那么它们将抛出“未找到模块”错误。
我也想这样做,并找到了可能的解决方案。
来自browserify -h 帮助:
--ignore, -i 用空存根替换文件。文件可以是 glob。
只需使用忽略功能。
browserify -i react -i react-dom ...
我还添加了 react 和 react-dom 作为对等依赖项,因为在我的情况下,该包可以导入到其他包构建中。
【讨论】:
您还可以使用 webpack.config.js 文件中的 externals 部分。例如:-
externals: {
// require('jquery') is loaded externally and avaliable as jQuery
"jquery": "jQuery"
}
【讨论】: