reactjs - 在使用第三方东西时如何保持 Browserify 包大小合理(如果重要的话通过 grunt )

标签 reactjs browserify commonjs grunt-browserify

我正在尝试捆绑我自己的代码 (A),它又使用 2 个第三方组件(B 和 C),其中 C 也需要 B。据我所知,所有内容都是使用 CommonJS 节点样式模块编写的。

捆绑后单独使用 A 的价格为 60K。

B 是单独包含的,并假定是全局的,我通过在构建步骤中进行一些肮脏的替换,将 require("B") 替换为 global.B,使此工作正常。

C 是导致我出现问题的原因,它的大小本来应该是“只有 8K”,但是当我尝试将它与 A 捆绑在一起时,我的 bundle 会跳到 600K+,因为我认为它会带来大量的依赖项?

这是 Not Acceptable ,但我不知道如何让它变得更小,因为我不知道它到底会带来什么(或者更重要的是我可以排除什么以使其仍然有效)。我可以尝试使用排除项进行二进制切割,但我不知道这是否是一种安全的方法,甚至是明智的方法。

我怎样才能捆绑 C 并只让我的 bundle 大小为 68.5K(两个代码块的总大小 60k + 8.5k)并且当然仍然可以工作?

我是 Node 和 browserify 的新手,但我已经在这个问题上苦苦钻研了一个多星期了,所以公平地说,在举手之前我已经对其进行了很好的尝试。

其他重要信息:

  • 它需要运行服务器端和客户端
  • B 实际上是 ReactJS
  • C 实际上是 React Router 组件
  • 通过 ReactJS.net 使用 Windows 和 C#...嘿...等等...回来...风滚草

最佳答案

如果您创建一个包含应用程序的所有依赖项 (B + C) 的外部 bundle ,并在捆绑应用程序自己的代码 (A) 时将这些模块声明为外部模块,那么事情应该按您的预期进行。

我不知道用于执行此操作的 grunt-browserify 配置咒语,但以下内容显示了如何在一些示例 gulp 任务中直接使用 browserify,因此 bundle 创建应该是可重用的:

var browserify = require('browserify')
var gulp = require('gulp')
var source = require('vinyl-source-stream')

gulp.task('js-deps', function() {
  var b = browserify()
  b.require('react')
  b.require('react-router-component')
  b.transform('envify')

  return b.bundle()
    .pipe(source('deps.js'))
    .pipe(gulp.dest('./build'))
})

gulp.task('bundle-js', function() {
  var b = browserify('./lib/app.js')
  b.external('react')
  b.external('react-router-component')

  return b.bundle()
    .pipe(source('app.js'))
    .pipe(gulp.dest('./build'))
})

关于reactjs - 在使用第三方东西时如何保持 Browserify 包大小合理(如果重要的话通过 grunt ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27922208/

相关文章:

javascript - 如何维护Sortable容器的子组件的状态?

javascript - 将 ES6 模块与 WebPack 一起使用,为什么还需要 require

javascript - 如何在单击按钮时将 Prop 推送到新页面?

node.js - Node js - http2 的 bundler

javascript - 为 CommonJS 模块 (Typescript) 导出附加接口(interface)

javascript - Node.js - 模块只初始化一次吗?

reactjs - 单击按钮渲染组件

Browserify 需要带有暴露的流

javascript - 为什么我的 browserify 任务会在导出的末尾附加两次

javascript - CommonJS、AMD 和 RequireJS 之间的关系?