大型Create-React-App捆绑包大小 - 优化生产构建

时间:2018-05-01 03:43:38

标签: reactjs heroku webpack create-react-app

希望使用以下buildpack在Heroku上部署create-react-app配置:https://github.com/mars/create-react-app-buildpack

我注意到在gzip压缩后我的构建大小 425 kb ,我的网站在初始加载时非常慢

以下步骤是否足以减少捆绑尺寸? (即降压预制的最佳效果)。如果没有,你会推荐什么呢? - 我还没有这样做:

  1. 代码拆分我尽可能使用React Loadable(也许可以使用 react-universal-component
  2. 确保我只加载所需的模块(例如import { map } from 'lodash/map';)。
  3. 我不愿意做的其他解决方案

    即添加以下内容:

    new webpack.optimize.DedupePlugin(), //dedupe similar code new webpack.optimize.UglifyJsPlugin(), //minify everything new webpack.optimize.AggressiveMergingPlugin()//Merge chunks

    Build time Gzip - 我认为create-react-app

    已经完成了这项工作

    我的源地图浏览器 - 再次尝试取消Firebase,删除Lottie,并仅导入必要的模块

    I will ensure I remove some modules through specifying better...

    Heroku Build Logs

    -----> React.js (create-react-app) multi app detected
    -----> Configure create-react-app build environment
           Using `NODE_ENV=development`
    =====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-multi.git
    =====> Detected Framework: Multipack
    =====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-nodejs.git
    =====> Detected Framework: Node.js
    -----> Creating runtime environment
    
           NPM_CONFIG_LOGLEVEL=error
           NPM_CONFIG_PRODUCTION=false
           NODE_VERBOSE=false
           NODE_ENV=production
           NODE_MODULES_CACHE=true
    -----> Installing binaries
           engines.node (package.json):  unspecified
           engines.npm (package.json):   unspecified (use default)
    
           Resolving node version 8.x...
           Downloading and installing node 8.11.1...
           Using default npm version: 5.6.0
    -----> Restoring cache
           Loading 2 from cacheDirectories (default):
           - node_modules
           - bower_components (not cached - skipping)
    -----> Building dependencies
           Installing node modules (package.json + package-lock)
           up to date in 14.708s
    -----> Caching build
           Clearing previous node cache
           Saving 2 cacheDirectories (default):
           - node_modules
           - bower_components (nothing to cache)
    -----> Pruning devDependencies
           Skipping because NPM_CONFIG_PRODUCTION is 'false'
    -----> Build succeeded!
    =====> Downloading Buildpack: https://github.com/mars/create-react-app-inner-buildpack.git
    =====> Detected Framework: React.js (create-react-app)
           Using existing `static.json`
           Enabling runtime environment variables
    -----> Build succeeded!
    =====> Downloading Buildpack: https://github.com/mars/create-react-app-inner-buildpack.git
    =====> Detected Framework: React.js (create-react-app)
           Using existing `static.json`
           Enabling runtime environment variables
    > journey-client@0.1.0 build /tmp/build_127125dc8ce0d7d71d8f78fe226cf544
    > npm run build-css && react-scripts build
    > journey-client@0.1.0 build-css /tmp/build_127125dc8ce0d7d71d8f78fe226cf544
    > node-sass-chokidar src/ -o src/
    Wrote 2 CSS files to /tmp/build_127125dc8ce0d7d71d8f78fe226cf544/src/
    Creating an optimized production build...
    File sizes after gzip:
      495.27 KB  build/static/js/main.b1129bd4.js
      18.05 KB   build/static/css/main.e2b6d04c.css
    The project was built assuming it is hosted at the server root.
    To override this, specify the homepage in your package.json.
    For example, add this to build it for GitHub Pages:
      "homepage" : "http://myname.github.io/myapp",
    The build folder is ready to be deployed.
    You may serve it with a static server:
      npm install -g serve
      serve -s build
    =====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-static.git
    =====> Detected Framework: Static HTML
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    -----> Installed directory to /app/bin
    Using release configuration from last framework (Static HTML).
    -----> Discovering process types
           Procfile declares types     -> (none)
           Default types for buildpack -> web
    -----> Compressing...
           Done: 92.5M
    -----> Launching...
           Released v94
    

3 个答案:

答案 0 :(得分:0)

  1. 仅使用需要使用的软件包。如果您有相当大的包装,请仅包括所需的模块:

    导入'firebase / auth'; 导入“ firebase / firestore”; 从'lodash.isequal'导入isEqual;

  2. 使用类似Gatsby.js的方法为您处理代码拆分!

  3. code splittingnext.jsreact-loadable或其他方法结合使用。

  4. 使用服务器端渲染解决方案

答案 1 :(得分:0)

我最近遇到了同样的问题,我不想退出旧的CRA项目。 我做了以下步骤: 1.将您的React ad React-DOM更新到最新版本(在我的情况下为16.8.6)-运行“ yarn react @ next react-dom @ next”(如果使用npm,则运行npm命令) 2.使用React.lazy和React.Suspense方法来按需延迟加载您的库和/或组件,这里是链接https://reactjs.org/blog/2018/10/23/react-v-16-6.html

就是这样,但是如果您使用'import'语法遇到错误,则需要使用babel-plugin-syntax-dynamic-import插件。

您将获得最新的react版本并希望减少捆绑包的大小-希望这对您有所帮助

答案 2 :(得分:0)

这是大型项目的create-react-app问题。我建议您手动设置react项目,并且确实需要针对开发和生产环境进行配置更改。 有大量资源可以帮助配置Web Pack,从而有助于减小项目的包大小。 这是其中之一的示例。

Two Quick Ways To Reduce React App’s Size In Production