egg中如何使用umi的项目

2,190 阅读2分钟

之前一直想知道,如何在egg中使用umi,最近刚好搭建了一下,现记录一下。

一.搭建egg项目

参考文档,搭建egg项目:地址

主要命令如下:

mkdir egg-example && cd egg-example   // 创建egg-example文件

npm init egg --type=simple            // 初始化egg模版

npm i                                 // 安装依赖

npm run dev                           // 启动项目

打开浏览器窗口:一般默认是7001,http://localhost:7001

二.搭建umi项目

参考文档,搭建umi项目:地址

因为主要在egg项目中使用,所以,在egg-example中创建新命令,主要命令如下:

cd egg-example/app && mkdir web && cd web       // 创建web目录

yarn create @umijs/umi-app                      // 创建项目

yarn                                            // 安装依赖

新创建的好的umi项目中有package.json的包管理,我为了统一,把相关依赖都拷贝到根目录下的package.json文件中

三.安装插件

umi文件其实主要是静态资源(不涉及ssr),egg中使用静态资源需要配置插件egg-view-assets,还有一个模版的插件,egg-view-nunjucks,安装依赖和设置配置

// 安装依赖
npm i egg-view-assets --save

npm i egg-view-nunjucks --save
// 配置插件 config/plugin.js
exports.assets = {  
    enable:true,
    package:'egg-view-assets'
}
exports.assets = {  
    enable:true,
    package:'egg-view-nunjucks'
}
// 配置view的解析模版 - config/config.default.js
 config.view = {    mapping: {      ".html": "nunjucks"    }  };

  // 配置静态文件的文件 - config/config.default.js  config.assets = {    publicPath:'/public/',    devServer:{      debug: true,      command: 'umi dev --port={port}',      port: 8002,      env: {        APP_ROOT: path.join(__dirname, "../app/web"),        BROWSER: 'none',        ESLINT: 'none',        SOCKET_SERVER: 'http://127.0.0.1:{port}'      },    }  }

四.新建html文件

在egg-example/app目录下新建view的文件夹,在该文件夹下新建html的文件

<!doctype html><html><head><meta charset="utf-8" /><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black"/><meta name="format-detection" content="telephone=no"/><meta name="format-detection" content="email=no"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" /><title>测试呵呵</title>{{ helper.assets.getStyle('umi.css') | safe }}</head><body><div id="root"></div><script>  window.routerBase = '/';  window.resourceBaseUrl = '{{ helper.assets.resourceBase }}';</script>{{ helper.assets.getScript('umi.js') | safe }}</body></html>

五.配置路由渲染

在 egg-example/app/router.js 中,添加以下代码:

 router.get('*', controller.home.index);

在 egg-example/app/controller/home.js 的控制器中,新增index的函数:

 async index() {    await this.ctx.render('index.html');  }

重新运行项目,打开浏览器:

npm run dev  

打开 http://localhost:7001 预览

完结,撒花🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉