最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Electron+React+七牛云开发跨平台云文档

    正文概述 掘金(前端梦想家)   2021-02-05   462

    前言

    采用了Electron+React+七牛云搭建的在线Markdown云文档。

    注意

    • 运行起来后,需要在菜单栏中打开设置中心,配置access_keysecret_key, bucket,才能同步到你自己的七牛云
    • 当需要release时,需要先确定package.json中的publish平台,并在自己的package.json中设置发布平台的GH_TOKEN

    以下是从0到1的搭建过程,当然,其中省略了中间的业务

    搭建electron+React开发环境

    • 拉取react脚手架代码:npx create-react-app my-app
    • 安装electron: cnpm install electron --save-dev
    • 项目根目录下新建main.js,并且在package.json中增加"main"入口:
        "main": "main.js",
    
    • 安装判断是否是本地开发的小工具:cnpm install electron-is-dev
    const { app ,BrowserWindow } = require('electron')
    const isDev = require('electron-is-dev')
    
    let mainWindow;
    
    app.on('ready',()=>{
        mainWindow = new BrowserWindow({
            width: 1024,
            height: 680,
            webPreferences: {
                nodeIntegration: true
            }
        })
        const urlLocation = isDev?'http://localhost:3000': 'ddd'
        mainWindow.loadURL(urlLocation)
    })
    
    • 安装同时运行两个命令的包:npm install concurrently --save
    • 修改package.json为如下,但是因为这是同时运行的,但是正常来说是前一个命令运行起来,再运行后一个命令
    "scripts": {
        "start": "react-scripts start",
        "build": "react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject",
        "ele": "electron .",
        "dev": "concurrently \"npm start\" \"npm run ele\""
      }
    
    • 因此需要再安装一个小工具:cnpm install wait-on --save-dev。并修改package.json如下:
    "scripts": {
        "start": "react-scripts start",
        "build": "react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject",
        "ele": "electron .",
        "dev": "concurrently \"npm start\" \"wait-on http://localhost:3000 && electron .\""
      },
    
    • 但是这样同时还会打开浏览器,为了不打开浏览器,可以设置BROWSER为none,但是有跨平台的问题,因此可以再安装一个跨平台的工具,用于设置环境变量:cnpm install cross-env --save-dev,并修改package.json修改为如下:
     "scripts": {
        "start": "react-scripts start",
        "build": "react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject",
        "ele": "electron .",
        "dev": "concurrently \"cross-env BROWSER=none npm start\" \"wait-on http://localhost:3000 && electron .\""
      },
    

    打包过程

    • 安装electron-builder: npm install electron-builder --save-dev
    • 项目根目录运行npm run build
    • 修改非开发环境下electron运行的本地地址:const urlLocation = isDev?'http://localhost:3000': file://${path.join(__dirname, './build/index.html')}
    • package.json中添加基本配置,package.json第一层添加如下代码:
    "author": {
        "name": "qiandingwei",
        "email": "1370336125@qq.com"
    },
    "build": {
        "appId": "cloudDoc",
        "productName": "七牛云文档",
        "copyright": "Copyright © 2020 ${author}"
      },
    
    • script中添加:
    "pack": "electron-builder --dir",
    "prepack": "npm run build",
    "dist": "electron-builder"
    
    • 运行npm run pack
    • 报错
    • 报错
    • 报错
    • 报错

    配置安装包

    • 在package.json的build中配置打包过程中的静态图片,告诉electron-builder安装包所需静态文件的位置:
    "directories": {
          "buildResources": "assets"
        },
    
    • 在package.json的build中添加win,mac,linux的配置
    "mac": {
          "category": "public.app-category.productivity",
          "artifactName": "${productName}-${version}-${arch}.${ext}"
        },
        "dmg": {
          "background": "assets/appdmg.png",
          "icon": "assets/icon.icns",
          "iconSize": 100,
          "contents": [
            {
              "x": 380,
              "y": 280,
              "type": "link",
              "path": "/Applications"
            },
            {
              "x": 110,
              "y": 280,
              "type": "file"
            }
          ],
          "window": {
            "width": 500,
            "height": 500
          }
        },
        "win": {
          "target": [
            "msi", "nsis"
          ],
          "icon": "assets/icon.ico",
          "artifactName": "${productName}-Web-Setup-${version}.${ext}",
          "publisherName": "Viking Zhang"
        },
        "nsis": {
          "allowToChangeInstallationDirectory": true,
          "oneClick": false,
          "perMachine": false
        }
    

    压缩优化体积

    • 在安装包中有一个app.asar是体积过大的主要罪魁祸首,解压后,发现其实就是package.jsonbuildfiles中的文件内容。
    • 优化视图层(react)。思路:在打安装包之前,已经通过npm run build将react相关的代码,也就是视图层的代码,进行了打包到build文件夹下,因此其实只需要将main.js中用到的包放在dependencies中就行了,剩余的包,移动到devDependencies中。因为electron-builder不会把devDependencies中的包打包进应用程序
    • 优化electron层。思路:通过新建webpack.config.jsmain.js进行打包,并配置,将main.js打包进入build文件夹

    如何release

    • package.json中配置release的平台为github,即在build中配置如何代码
        "publish": ["github"]
    
    • GitHub中生成该项目所需要的access_key,并替换如下代码you_access_key的对应位置
    • package.json中配置release命令并设置环境变量,如下:
    "release": "cross-env GH_TOKEN=you_access_key electron-builder",
        "prerelease": "npm run build && npm run buildMain"
    
    • npm run release即可。

    版本自动更新

    • 安装npm install electron-updater --save-dev并在main.js中引入:
    const { autoUpdater} = require('electron-updater')
    
    autoUpdater.autoDownload = false
        autoUpdater.checkForUpdatesAndNotify()
        autoUpdater.on('error',(error)=>{
            dialog.showErrorBox('Error',error===null?"un-known":error)
        })
        autoUpdater.on('update-available',()=>{
            dialog.showMessageBox({
                type: 'info',
                title: '应用有新的版本',
                message: '发现新应用,是否现在更新?',
                buttons: ['是','否'],
            },(buttonIndex)=>{
                if(buttonIndex===0){
                    autoUpdater.downloadUpdate()
                }
            })
        })
        autoUpdater.on('update-not-available',()=>{
            dialog.showMessageBox({
                type: 'info',
                title: '没有新的版本',
                message: '当前已经是最新版本',
            })
        })
    

    需要教程及相互交流的私聊 ❤️爱心三连击

    1.看到这里了就点个在看支持下吧,你的「在看」是我创作的动力。

    2.关注公众号前端梦想家,「一起学前端」!

    3.添加微信【qdw1370336125】,拉你进技术交流群一起学习。


    起源地下载网 » Electron+React+七牛云开发跨平台云文档

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元