如何从我的Browserified包中排除"require('react')"?

And*_*ena 19 javascript browserify reactjs

我正在使用Browserify捆绑ReactJS应用程序.

我的所有组件都包含require("react")在顶部.这导致在我的包中Browserify包含ReactJS源.但我想排除它.

我怎么做?这是正确的做法吗?

Bri*_*and 48

@NickTomlin给出了这个答案,但随后删除了它.


你可以使用external:

browserify --external react src.js > dest.js

使用api的一个例子:

var bundler = browserify('src.js');

bundler.external('react');
bundler.bundle();
Run Code Online (Sandbox Code Playgroud)

这是一个可行的选择. external需要另一个脚本以兼容的方式提供模块.您可以生成这样的脚本:

browserify -r react > react.js
env NODE_ENV=production browserify -r react | uglifyjs -m > react.min.js
Run Code Online (Sandbox Code Playgroud)

在HTML中:

<script src="react.js"></script>
<script src="dest.js"></script>
Run Code Online (Sandbox Code Playgroud)

dest.js是你的代码,除了反应.react.js只是反应及其依赖.

外部需要更多东西吗?除了反应之外,只需添加它们.

browserify -x react -x react-bootstrap src.js > dest.js
browserify -r react -r react-bootstrap > vendor.js
Run Code Online (Sandbox Code Playgroud)

你也可以在package.json中做这样的事情

"browser": {"react": "./react-fake.js"}
Run Code Online (Sandbox Code Playgroud)
// ./react-fake.js
try {
    module.exports = require('react');
} catch(e){
    module.exports = window.React;
}
Run Code Online (Sandbox Code Playgroud)

并编译-x react.这允许您接受-r react构建,并回退到全局React.


And*_*Ray 6

听起来你想使用browserify-shim.

在你的 package.json

"browserify-shim": {
    "react": "global:React"
},
"browserify": {
    "transform": [ "browserify-shim" ]
},
"dependencies": {
    "browserify-shim": "~3.2.0"
}
Run Code Online (Sandbox Code Playgroud)

(未经测试).本节提供了更多信息.