【问题标题】:Size of bundled ReactJS app捆绑的 ReactJS 应用程序的大小
【发布时间】:2016-10-13 09:40:29
【问题描述】:

我正在尝试减小我的 reactjs 应用程序 bundle.js 文件的大小。对于一个相对简单的应用程序,我的浏览器化 js 文件大小 - 452Kb。

为了构建它,我使用 NPM 和相应的 package.json 文件:

   {
      "name": "MyApp-React",
      "version": "0.0.1",
      "description": "My App Description",
      "main": "app.js",
      "scripts": {
        "watch": "watchify app.js -o public/js/bundle.js -v",
        "browserify": "browserify app.js | uglifyjs > public/js/bundle.js",
        "build": "npm run browserify",
        "start": "npm install"
      },
      "author": "",
      "dependencies": {
        "axios": "^0.14.0",
        "body-parser": "^1.15.2",
        "clipboard": "^1.5.12",
        "express": "~4.9.7",
        "express-handlebars": "~1.1.0",
        "express-session": "^1.14.1",
        "highlight.js": "^9.7.0",
        "node-jsx": "~0.12.4",
        "react": "~15.3.1",
        "react-dom": "^15.3.1",
        "react-maskedinput": "^3.2.4",
        "react-modal": "^1.4.0",
        "react-router": "^2.8.1"
      },
      "devDependencies": {
        "browserify": "~6.0.3",
        "nodemon": "^1.2.1",
        "reactify": "~1.1.1",
        "uglify-js": "~2.4.15",
        "watchify": "^3.1.1"
      },
      "browserify": {
        "debug": false,
        "transform": [
          "reactify"
        ]
      }
    }

不是 Node JS/ReactJS 开发方面的专家,我希望我做错了什么,但我找不到。

暂时我尝试了几件事:app.js 文件有一行代码将 NODE_ENV 变量设置为“生产”

process.env.NODE_ENV = 'production';

我尝试的第二件事是使用带有 --production 参数的 npm prune 命令。运行后,我看到它从 node_modules 文件夹中删除了很多内容,但是 npm run build 无法运行,因为它错过了 devDependencies。我能做什么?

【问题讨论】:

    标签: reactjs npm bundle browserify reactify


    【解决方案1】:

    为减轻用户的下载负担,您可以做的一件事是从 CDN 获取 reactreact-dom,而不是将它们放入捆绑包中。

    将它们从 package.jsondependencies 部分移动到新的部分 peerDependencies (see npm docs)。

    然后将 标签添加到您的 HTML 代码中,以像这样加载 React 和 ReactDOM:

    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.min.js"></script>
    

    → 见React on cdnjs.com

    然后您需要更改 Browserify 配置以将 reactreact-dom 识别为外部模块。

    → 见related question on StackOverflow

    【讨论】:

    • 删除 express(和 for-express 模块)没有帮助。大小根本没有变化。将 react 和 react-dom 移到 html 文件中后,我在运行构建命令时无法从“...”中找到模块“react”
    • 我不熟悉 Browserify,我怀疑你必须配置它才能识别 react 和 react-dom 来自 CDN。在我使用的 Webpack 中,您可以为它们配置别名。
    • 从我的回答中删除了关于 express 的部分
    猜你喜欢
    • 2016-03-12
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多