如何从我的浏览器包中排除“require('react')”?

IT技术 javascript reactjs browserify
2021-04-19 01:47:34

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

我的所有组件require("react")都在顶部包含一个这导致BrowserifyReactJS包含在我的包中。但我想排除它。

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

4个回答

@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。

问题是,browser只是一个转换,所以它不适用于您的 node_modules。因此,如果您有任何引用 react 的 node_modules 库,那么它们将抛出“找不到module”错误。
2021-05-26 01:47:34
我相信中间代码块中有一个错字。第一个 browserify 的输出文件名应该是 dest.js 而不是 vendor.js,否则第二个 browserify 会覆盖第一个。
2021-06-13 01:47:34

听起来您想使用browserify-shim

在你的 package.json

"browserify-shim": {
    "react": "global:React"
},
"browserify": {
    "transform": [ "browserify-shim" ]
},
"dependencies": {
    "browserify-shim": "~3.2.0"
}

(未经测试)。本节有更多信息。

2021-06-21 01:47:34
我在使用 browserify-shim 时遇到了很多麻烦。我有一个 umd module,我正在尝试对其进行浏览器化,即使我的 package.json 指定了 browserify-shim: { 'foo': ',它也不会将module require('foo') 调用更改为 global['Foo']全球:Foo' }。我需要以某种方式定位该module吗?像 browserify-shim: { 'mod': { 依赖: "foo" }}
2021-06-22 01:47:34

我也想这样做,并找到了一个可能的解决方案。

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"
    }

https://webpack.github.io/docs/library-and-externals.html