当前位置: 首页 > news >正文

react-create-app

github地址
配置文档
环境变量

λ yarn add classnames lodash @material-ui/core react-router-dom mobx mobx-react rxjs
λ yarn add babel-plugin-react-html-attrs  @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties babel-plugin-import --dev
yarn create react-app my-app
yarn run eject // 显示所有配置文件

  "babel": {
    "presets": [
      "react-app"
    ],
    "plugins": [
      ["@babel/plugin-proposal-decorators", {
        // "decoratorsBeforeExport": true
        "legacy": true
      }],
      ["@babel/plugin-proposal-class-properties", {
        // "decoratorsBeforeExport": true
        "loose": true
      }],
      ["import", {
        "libraryName": "@material-ui/core",
        "libraryDirectory": "",
        "camel2DashComponentName": false
      }, "@material-ui/core"],
      ["import", {
        "libraryName": "lodash",
        "libraryDirectory": "",
        "camel2DashComponentName": false
      }, "lodash"]
    ]
  },

修改打包路径

config/paths.js 37行

修改路径的 alias

//    config/webpack.config.dev.js 和 config/webpack.config.prod.js 大概92行

    alias: {
      '@': path.resolve(__dirname, '../src'),
      // Support React Native Web
      // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
      'react-native': 'react-native-web',
    },

// 使用
import store from '@/store'

package.json -> proxy

  "proxy":"http://localhost:5000"
   
  let { data } = await axios.get("/users");  // http://localhost:5000/users

多个 proxy

yarn add http-proxy-middleware

// src/setupProxy.js
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
      app.use(proxy("/api", { targe: "http://localhost:5000" }) // axios('/api/hello')  => http://localhost:5000/api/hello
      app.use(proxy("/yii", { targe: "http://localhost:5001" })  // axios('/yii/hello')  => http://localhost:5001/yii/hello
};

删除.map文件

// scripts/build.js
process.env.GENERATE_SOURCEMAP = false;

polyfill

开启兼容 ie11
yarn add react-app-polyfill

// src/index.js
import 'react-app-polyfill/ie11';

打包优化 babel-minify

npm install babel-minify-webpack-plugin --save-dev

// webpack.config.prod.js
const MinifyPlugin = require("babel-minify-webpack-plugin");
module.exports = {
  plugins: [
      new MinifyPlugin({}, { comments: false }),
  ]
}

打包优化 DllPlugin

// 先修改 webpack.config.prod.js

const config2 = [
  {
    name: "vendor",
    mode: "production",
    entry: [
      "react",
      "react-dom",
      "lodash",
      "axios",
      "classnames",
      "@material-ui/core",
      "mobx",
      "mobx-react",
      "react-router-dom",
    ],
    output: {
      path: path.resolve(__dirname, "..", "public"),
      filename: "vendor.js",
      library: "vendor_[hash]",
    },
    plugins: [
      new webpack.DllPlugin({
        context: __dirname,
        name: "vendor_[hash]",
        path: path.resolve(__dirname, "..", "public/manifest.dll.json"),
      }),
    ],
  },
  {
    name: "app",
    mode: "production",
    dependencies: ["vendor"],
    plugins: [
      new webpack.DllReferencePlugin({
        context: __dirname,
        manifest: require("../public/manifest.dll.json"),
      }),
    ]
  }
]

module.exports = config2;

// 再修改 scripts/build.js  102行
const publicPath = config[1].output.publicPath;

// 修改 public/index.html
<script src="%PUBLIC_URL%/vendor.js"></script>

打包优化 HappyPack

webpack.config.prod.js

// webpack.config.prod.js
yarn add happypack --dev

const HappyPack = require("happypack");
const os = require("os");
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });

plugins: [
    new HappyPack({
    id: "js",
    loaders: [
      {
        loader: "babel-loader",
      },
    ],
    threadPool: happyThreadPool,
    }),
]

打包优化 UglifyJsPlugin

yarn add uglifyjs-webpack-plugin --dev

// webpack.config.prod.js

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

  plugins: [
    new UglifyJsPlugin({
        test: /\.js($|\?)/i,
        cache: true,
      })
  ]

使用隧道代替 localhost:3000

需要在 devserver 中配置白名单

// webpackDevServer.config.js

    allowedHosts: ["a.domin.com"],

转载于:https://www.cnblogs.com/ajanuw/p/9310745.html

相关文章:

  • 好用的Vue状态管理模式:浅谈Vuet在实际应用中解决的问题
  • Android 解决 View 的滑动冲突
  • RabbitMQ-Java版本生产与消费
  • Ajax学习(一)
  • window对象
  • saltstack常用远程命令
  • vuex,vue问题汇集(一)
  • ERROR   OGG-01161 Bad column index (15) specified for table
  • HNUSTOJ-1520 压缩编码
  • java json与map互相转换(一)
  • 『TensotFlow』RNN中文文本_上
  • 高并发网络编程之epoll详解(转载)
  • AdTime:DMC多层面助力企业咨询
  • JSP页面出现乱码
  • Linux 破坏性修复
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • AWS实战 - 利用IAM对S3做访问控制
  • ComponentOne 2017 V2版本正式发布
  • conda常用的命令
  • Gradle 5.0 正式版发布
  • gulp 教程
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS笔记四:作用域、变量(函数)提升
  • nginx 配置多 域名 + 多 https
  • React-Native - 收藏集 - 掘金
  • TCP拥塞控制
  • 从0到1:PostCSS 插件开发最佳实践
  • 多线程 start 和 run 方法到底有什么区别?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 排序算法学习笔记
  • 如何设计一个比特币钱包服务
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 应用生命周期终极 DevOps 工具包
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 《天龙八部3D》Unity技术方案揭秘
  • 国内开源镜像站点
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (第61天)多租户架构(CDB/PDB)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)linux下的时间函数使用
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net和php怎么连接,php和apache之间如何连接
  • .NET开源快速、强大、免费的电子表格组件
  • @JoinTable会自动删除关联表的数据
  • @JsonSerialize注解的使用
  • [<事务专题>]
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Android Studio] 开发Java 程序
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)