捆绑的 ReactJS 应用程序的大小

Size of bundled ReactJS app

我正在尝试减小我的 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 变量到 'production'

process.env.NODE_ENV = 'production';

我尝试的第二件事是使用带有 --production 参数的 npm p运行e 命令。有了这个 运行,我看到它从 node_modules 文件夹中删除了很多东西,但是 npm 运行 构建失败 运行 因为它错过了 devDependencies。我能做什么?

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

将它们从 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 识别为外部模块。

→ 见