我正在使用Browserify
捆绑ReactJS
应用程序。
我的所有组件require("react")
都在顶部包含一个。这导致Browserify
将ReactJS
源包含在我的包中。但我想排除它。
我怎么做?这是正确的做法吗?
我正在使用Browserify
捆绑ReactJS
应用程序。
我的所有组件require("react")
都在顶部包含一个。这导致Browserify
将ReactJS
源包含在我的包中。但我想排除它。
我怎么做?这是正确的做法吗?
@NickTomlin 给出了这个答案,但随后将其删除。
您可以使用external
:
browserify --external react src.js > dest.js
使用 api 的示例:
var bundler = browserify('src.js');
bundler.external('react');
bundler.bundle();
这是一个可行的选择。 external
需要另一个脚本以兼容的方式提供module。您可以生成这样的脚本:
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 及其依赖项。
需要更多的外部东西?除了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。
听起来您想使用browserify-shim。
在你的 package.json
"browserify-shim": {
"react": "global:React"
},
"browserify": {
"transform": [ "browserify-shim" ]
},
"dependencies": {
"browserify-shim": "~3.2.0"
}
(未经测试)。本节有更多信息。
我也想这样做,并找到了一个可能的解决方案。
从browserify -h
帮助:
--ignore, -i 用空存根替换文件。文件可以是 globs。
只需使用忽略功能。
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"
}