中後臺管理框架實戰!Near-Admin(介紹篇)

2021-02-25 Flask中文論壇

父老鄉親們看官老爺們,大家好,作為一個半年更的公眾號😂,是時候給大家來兌現自己立的flag了!廢話不多說,本期給大家帶來的是一個船新的東西,是作者本人近期重構並開源的一個中後臺前端開發框架,雖然這個公眾號前期關注的粉絲大部分為後端開發,但是不用擔心,掌握這個高效率的中後臺前端開發框架,能讓你非常快速的實現一個後臺管理系統,即使後端開發人員也能輕鬆上手,一起來看看吧。

tip:由於項目的文檔正在努力補充中,本篇主要是對這個框架進行一個介紹(後期會有實戰篇),先讓大家初步了解下,如果現在就想嘗試一下,又有使用上的疑惑,可以加入文末微信群或QQ群,卑微的作者會在線幫你解答問題。

項目地址:https://github.com/yiptsangkin/near-admin-vue 歡迎給個star哈哈~

面向A端開發的前端工程師在整個前端開發工程師群體中絕對不佔小數,然而在實際開發過程中,總有一項你逃不過的工作項目,那就是配置路由。無論是ant-design-pro還是vue-element-admin,這些在github上面的高star項目都是用路由的方式去實現菜單、頁面等功能,兩年前,作者也面臨這同樣的問題,寫完文件結構,還要寫路由結構,尤其還要絞盡腦汁去為每一個路由確定層級、命名,是一件非常痛苦的事情,那麼有沒有辦法不用配置路由呢?Near-Admin這個項目的起源就源於這次思考。

Near-Admin是Near-Admin是一個基於 vue 、antd和typescript的中後臺開發框架,支持多頁多路由打包,內置了多頁打包自定義配置,優化打包vendor,全局快捷鍵,i18n國際化解決方案(帶機翻功能),全局字典,本地mock,動態路由,權限驗證等功能。開發模式上只需要遵循框架約定的動態組件上開發即可,專注於單個組件的開發。這是一個專注於開發者體驗和用戶體驗的中後臺開發框架,希望能夠有效提高使用者的工作效率。

一、下載安裝

# clone the project from githubgit clone https://github.com/yiptsangkin/near-admin-vue.git
# enter the project directorycd near-admin-vue
# install dependencynpm install
# run application with all pagesnpm run serve
# run application with single page and pick target entrynpmr run single:serve
? Pick target entry › ◯ auth◯ manage

成功拉取項目代碼後,進入到項目文件,使用npm install安裝項目依賴(如果網速比較慢,請使用cnpm進行安裝),項目有兩種在本地運行的模式,一種是所有頁面一起運行,另外一種是可以自己選擇想要運行的獨立頁面。運行成功後,點擊控制臺的地址就能直接跳轉到對應的頁面啦(默認跳轉到登陸頁)。


本地運行成功

功能點介紹:

1、多頁運行、打包

由於現實生產項目中,如果隨著一個應用的複雜程度上升,單頁應用的整體體積將會變得越來越大,導致頁面白屏加載時間越來越長,而單獨拆分項目,也面臨的多次打包,多次運行的麻煩,Near-Admin從項目打包配置本身就解決了這個問題,支持多入口打包,支持自定義哪些單頁打包在一起,可以讓你在一個項目裡面就可以管理多個小項目,有點類似微前端的概念。


項目基本結構

(1)打包全部頁面

# prod環境npm run prod:build
# uat環境npm run uat:build
# dev環境npm run dev:build

打包完可以看到,打包成功的dist文件夾中包含了auth.html和manage.html兩個入口。


整體打包

(2)打包單獨頁面
如果大家涉及到只想打包或者發布多頁項目中的其中一個,可以嘗試單頁打包(比方某個頁面中的一些小的需求修改,不想要整體發布)

# 單個打包(其實支持選擇多個,因此可以自由的合併要打包哪些內容)npm run single:build
# 需要按照步驟選擇# 1、選擇要打包的頁面? Pick target entry › ◯ auth◯ manage# 2、選擇要打包環境? Pick target environment › - Use arrow-keys. Return to submit.❯ prod uat dev# 3、選擇是否清空dist文件夾,為什麼要有這個選項?# 分步打包的時候可以按照自己的需求來打包,不會清空之前已經打包的內容。? Pick clean dist or not › - Use arrow-keys. Return to submit.❯ yes    no

這裡單獨選擇了打包auth這個應用,可以看到,打包完成後可以看到dist文件夾中只有auth.html一個文件。

單獨打包

Q & A

(1)選擇打包環境有什麼區別呢?
不同的打包環境,引用的apiConfig不一樣,也就是最終大家請求的api的host會不一樣,具體邏輯在build/utils.js這個打包腳本中有體現。

switch (process.env.BUILD_ENV) {    case 'prod':        baseConfig.externals.apiconfig.url = [`/static/js/apiConfigProd.js`]        break    case 'uat':        baseConfig.externals.apiconfig.url = [`/static/js/apiConfigUat.js`]        break    case 'dev':        baseConfig.externals.apiconfig.url = [`/static/js/apiConfigDev.js`]        break    default:        // default dev api config        baseConfig.externals.apiconfig.url = [`/static/js/apiConfigDev.js`]}

(2)整體打包一整個項目和單獨分別打包所有的頁面有什麼區別?

整體打包,webpack會智能的幫你合併vendor和分包,對於兩個頁面公共的部分會打包成一個整體,例如,auth和manage兩個頁面都使用了antd,那麼將會被抽成一個公共的vendor引用,對於整體打包來說,二者引入的是同一個js,在訪問完auth之後,這個js會被瀏覽器緩存,因此訪問manage的時候速度會很快,如果單獨打包,那麼各自的依賴都屬於各自的vendor,訪問auth後,並不能緩存manage的vendor,因此每個頁面相當於是完全獨立。所以,不同的打包模式要根據實際情況來考慮,像auth和manage二者的關聯性非常大,那麼可以考慮合併兩者的打包,如果多了一個c端的用戶頁面,跟auth和manage關聯不大,那麼他完全可以自己獨立打包。

(3)對於單獨的頁面想要用url模式引入自定義js和css怎麼做?

Near-Admin在每個單頁應用的目錄下配置了一個page.config.json的文件,用戶可以按照約定的模式寫入js和css,打包後將自動引入到對應的html文件中。

{  "title": "Near-Admin",  "externals": {    "polyfill": {      "type": "js",      "url": [        "/static/js/near.polyfill.js"      ]    },    "apiconfig": {      "type": "js",      "url": []    }  }}

<!-- 打包內容自動插入了這個url的js,樣式同理,type為css --><!DOCTYPE html><html><head><!-- ... --><script src=/static/js/near.polyfill.js></script><!-- ... --></body></html>

從上面的代碼中,我們可以看到,引入了polyfill和apiconfig兩個js,js也支持列表引入,比較靈活。

2、管理後臺自帶功能

(1)頁面需要配置路由?no!

Near-Admin在頁面管理部分使用動態組件的方案去實現,避免了開發者需要進行非常繁複的路由配置工作,在緩存方面從框架層面就直接考慮了,這裡就拿一個小小的🌰來說明一下如何在Near-Admin配置一個菜單,並打開一個標籤(詳細的開發使用會在後期的文章中說明)

首先我們在pages/manage/view中添加一個文件(所有的頁面組件都需要放在對應頁面的view目錄下面),然後在菜單中配置於view的相對路徑即可,如這裡的home/HomePage,我在只需要在菜單中配置或者調用$newpage的指令即可完成打開一個新標籤頁的操作:

/* 菜單配置 */{    name: 'menuObj.childMenu.1-0-0',    path: 'home/HomePage',    icon: ''}/* 指令打開新頁面 */this.$newpage({    title: '首頁',    component: 'home/HomePage'})

就這樣子你就完成了一個新的標籤頁的打開操作,不需要任何的路由配置。想要打開url怎麼樣呢?你只需要在path裡面配上url地址即可,框架會自動判斷你這個組件地址是否是網絡地址,如果是的話會默認調用框架內的webview組件,在標籤頁內顯示你的外鏈。

框架還支持標籤頁攜帶參數、而且自動幫你處理好同名組件的緩存問題,這部分等我們後面文章我們再仔細介紹下。

(2)全局快捷鍵

框架本身提供了全局快捷鍵的功能,能夠支持你在配置文件中配置你在不同頁面中不同快捷鍵組合觸發的事件內容,配置文件在src/assets/ts/custom/hotkeyconfig.ts

import {HotKeyConfig} from '@corets/type'
const hotkeyconfig: HotKeyConfig = { 'ctrl+e': { // page component path means the hot key config will effect only equal to current page component path // if you use wildcard, write the method in custom/base.ts // if you don't use wildcard but page path, write the method in page component SFC 'logline/Logline': [ { name: `Logline 'Ctrl+e' event`, method: 'exportLog' } ], '*': [ ] }}
export default hotkeyconfig

從上圖的配置中可以看到,在logline/Logline頁面下,按ctrl+e會觸發一個exportLog的function,實際效果如下圖所示:

除此之外,還支持通配符,如在*中配置的會在所有的頁面中都觸發,也支持觸發多個事件,在對應頁面下面的數組配置好事件順序即可。
(3)國際化

Near-Admin內置了國際化功能,同時也為開發者們做了一個簡單又貼心的機器翻譯腳本,支持google translate所支持的所有語種,而開發者只需要根據自己的母語配置一個locale_BASE.ts的文件,運行腳本就可以一次性翻譯多個版本。

# 運行npm run translate,選擇需要翻譯的目標語言npm run translate? Pick target language ›  ◯   ar_EG◯   bg_BG◯   ca_ES◯   cs_CZ◯   da_DK◯   de_DE◯   el_GR◯   en_US◯   es_ES◯ ↓ et_EE

翻譯完成後可以在語言目錄下面看到輸出的內容

export default {    locale: 'ja',    country: 'JP',    sysInfo: {        sysIntro: 'Vueとアリのデザインに基づく使いやすいフロントエンド開発フレームワーク'    },    loginForm: {        byAccountBtn: 'アカウントパスワードログイン',        byPhoneBtn: '電話番號ログイン',        accountPlaceholder: 'ユーザー名を入力してください',        passwordPlaceholder: 'パスワードを入力してください',        autoLogin: '自動ログイン',        forgetBtn: 'パスワードを忘れた',        loginBtn: 'ログインする',        byAccountTip: {            emptyErr: 'アカウントを空にすることはできません'        },        byPasswordTip: {            emptyErr: 'パスワードは空白にできません'        },        byValidTip: {            emptyErr: '確認コードを入力する必要があります'        },        sendMsg: {            repeatErr: '繰り返し送信しないでください',            success: '成功する',            codeTip: '確認コードは'        },        phonePlaceholder: '電話番號を入力してください',        validPlaceholder: 'キャプチャ',        validBtn: '確認コードを取得',        loginSuccess: 'ログイン成功'    },    requestInfo: {        withoutUrl: 'リクエストアドレスは空にできません',        networkErr: 'ネットワークリクエストが失敗しました。しばらくしてからもう一度お試しください'    },    localeMap: {        ar: 'アラビア語',        bg: 'ブルガリア人',        ca: 'カタロニア語',        cs: 'チェコ人',        da: 'デンマーク語',        de: 'ドイツ人',        el: 'ギリシャ人',        'en-gb': '英語',        en: '英語',        es: 'スペイン語',        et: 'エストニア語',        fa: 'ペルシア語',        fi: 'フィンランド人',        fr: 'フランス語',        he: 'ヘブライ語',        hi: 'ヒンディー語',        hr: 'クロアチア語',        hu: 'ハンガリー人',        hy: 'アルメニア人',        id: 'インドネシア語',        is: 'アイスランド語',        it: 'イタリアの ',        ja: '日本語',        kn: 'カンナダ語',        ko: '韓國語',        'ku-iq': '中央クルド語',        lv: '中央クルド語',        mk: 'マケドニアの',        'mn-mn': 'モンゴル語',        'ms-my': 'マレー語',        nb: 'ノルウェー語',        'ne-np': 'ネパール語',        'nl-be': 'フラマン語',        nl: 'オランダの',        pl: '研磨',        'pt-br': 'ブラジルポルトガル語',        pt: '歐州ポルトガル語',        ro: 'ルーマニア語',        ru: 'ロシア語',        sk: 'スロバキア',        sl: 'スロベニア語',        sr: 'セルビア語',        sv: 'スウェーデンの',        ta: 'タミル語',        th: 'タイ人',        tr: 'トルコ語',        uk: 'ウクライナ語',        vi: 'ベトナム人',        'zh-cn': '簡體字中國語',        'zh-tw': '繁體字中國語'    },    menuObj: {        basicFeature: '基本能力',        cpUse: 'コンポーネントの使用',        childMenu: {            0: '基本的なフレームワーク',            1: '基本能力',            '0-0': 'Vue',            '0-1': 'Ant Design',            '1-0': 'フレーム機能',            '1-0-0': 'プロジェクト構成',            '1-0-1': 'フロントエンドログ',            '1-0-2': 'ローカルモック',            '1-0-3': 'グローバリゼーション',            '1-0-4': 'データ辭書',            '1-0-5': 'EventBus',            '1-0-6': 'ツールセット',            '1-0-7': 'アクセス制御',            '1-0-8': 'ホットキー',            '1-1': 'ページ機能',            '1-1-0': 'コンポーネントページ',            '1-1-1': 'URLページ',            '1-1-2': '許可ページなし',            '1-1-3': '404ページ'        },        defaultMenu: {            home: 'ホーム'        },        errorTip: {            notfoundTip: 'このパスの下にコンポーネントが見つかりません',            emptyErr: 'コンポーネントパスが構成されていません'        }    },    tagObj: {        closeAll: 'すべてのタブを閉じる',        closeCur: '現在のタブを閉じる',        closeOther: '他のタグを閉じる',        closeRight: '右のラベルを閉じる',        singlePage: '獨立したページ',        refreshPage: 'ページの更新',        affixPage: '固定ページ',        cancelAffixPage: '固定を解除',        errorTip: {            homePageCloseError: 'ホームページを閉じることはできません',            affixPageCloseError: '固定ページは閉じることができません',            homePageAffixError: 'ホームページの固定を解除できません'        },        checkSave: 'ページを閉じますか?(赤いラベルページのコンテンツが保存されていることを確認してください)',        cancelClose: 'クローズドオペレーションがキャンセルされました'    },    personalCenter: {        frontendLog: 'フロントエンドログ',        customSetting: 'パーソナライズ設定',        logout: 'サインアウト'    },    errorPage: {        errorTip: {            notfoundTip: 'アクセスしたページは存在しません',            notrightTip: 'このページにアクセスする権限がありません',            noserviceTip: 'サーバーで問題が発生しました。しばらくしてからもう一度お試しください'        },        btnText: 'ページを閉じる'    }}

頁面上的語言選擇組件也自動根據你翻譯的語種處理好了可選語言,osx下面還能看到不同國家的小旗子😂

切換語種效果圖

對於一些翻譯準確度不需要非常精確但是又希望引入國際化的朋友,相信這會是一個極其方便的工具。

(4)其他

框架內部還集成了前端日誌、權限指令(支持「非」操作)、本地mock以及封裝好的一些工具集等多種功能,由於目前我還沒有完善好demo示例沒辦法截圖給大家看,所以這裡就只是提一下,如果大家感興趣或者有疑問的話可以加到群裡問我,我會即時給大家反饋。

總的來說呢,框架方面做了很多細節的考慮,如標籤這塊,右鍵會支持多種功能,包括關閉類的操作呀、獨立頁面、刷新頁面、固定頁面等,出現滾動條右側還會有一個下拉菜單按鈕,點擊標籤會自動定位到最開始的位置,方便用戶知道自己點了哪個標籤。全局狀態部分也為大家預設好了一些action、getters,能夠讓開發者更快的上手。

右鍵菜單

後續公眾號會陸續為大家分享使用教程、也希望有感興趣的朋友可以參與到這個項目中來,畢竟一個人的能力也有限,時間上也不大允許會影響進度。

目前項目也有一個js版本的,一位同事在維護中,地址是:https://github.com/Kim1am/near-admin-vue-vtype 不過可能進度沒有主分支這麼快,歡迎大家貢獻代碼。

最後是答疑環節:

1、為什麼是antd而不是element?

實不相瞞,near-admin-vue在2年前最初的版本確實是element,但是由於element在組件的豐富度上還有ui的設計上確實是不及antd(僅代表個人觀點),因此在vue版本的antd出來之後,作者便開始考慮使用antd來重構這個中後臺的開發框架,如果你希望有一個element版本的話,那麼可以來這個Issue#1下面發表下你的意見,我會視人數來考慮是否重構,或者有感興趣希望成為貢獻者的話也可以參與進來,因為切換的成本不會特別高,但是需要花一定的時間去實現。

2、為什麼near-admin-vue是這樣子的開發模式?

從一開始,作者對於後臺管理需要配置路由就是非常的反感,因此從一開始類似的基於路由的框架基本不在我的考慮範圍,因此我才想開始自己製作一個框架,用於滿足自己的開發需求,near-admin-vue從初始化項目之後,你可以專注於每個組件的開發,而不需要再去搭理路由,配置等任何東西,會有效的提高你的開發效率。

3、為什麼near-admin-vue使用的是多頁的打包模式?

嚴格意義上,near-admin-vue是一個可以打包多頁多路由的框架,本質上相當於在一個項目中可以打包多個單頁應用,於此同時,作者還增加了靈活的打包腳本,允許你可以在打包過程中只選擇一個或者多個單頁應用打包,發布應用的時候更加的靈活,不需要整體的打包,利用的好的話你可以輕鬆的實現微前端架構。

4、框架本身內置了這麼多種語言版本嗎?

框架本身帶有機器翻譯的腳本(Google Translate),因此使用者只需要維護一個版本的國際化文檔內容,就可以直接快速的通過機器翻譯出多個版本,對於一些翻譯準確度沒有非常高的國際化系統,非常的方便。

接下來是QQ群還有微信群的二維碼





相關焦點

  • Django基礎(19): Django Admin管理後臺詳解(上)
    小編我一開始對django自帶的admin其實內心是拒絕的,所以一直拖到今天才寫專文介紹Django的admin。在今天來看,這是小編我本不該犯的錯誤,所以也建議大家千萬不要拒絕使用Django的admin,而是應該學習更好地使用django的admin。Django自帶的admin是快速開發管理後臺的一把利劍,可以大大加快開發速度,也是Django的一個主要優點。
  • 在金融機構做中後臺工作,是好的選擇嗎?
    之前有朋友在後臺留言,希望了解下金融機構的中後臺職位。這次職友團隊也是淘盡了朋友圈各種問,整理成今天的推文,希望給需要的朋友參考~以公募基金為例,前臺職能分研究條線和銷售條線,之前發過的職業介紹文主要介紹了這兩類。
  • zuihou-admin-cloud 1.8 發布,支持 Cloud Alibaba 2.2.0
    Order和Demo 服務中 seata 相關配置移動到 zuihou-order/demo-server.yml 配置文件中, 並通過參數控制是否啟用  簡介:基於`SpringCloud(Hoxton.SR1)`  + `SpringBoot(2.2.2.RELEASE)` 的 SaaS型微服務腳手架,具備用戶管理、資源權限管理、網關統一鑑權
  • PageAdmin Cms網站管理系統密碼複雜程度設置
    現在信息安全這塊管理越來越嚴格,很多重要的網站強制要求等保驗證,政府網站必須過三級等保,國企單位,學校網站要求過二級等保,所以在選擇cms的時候也會很注意cms系統的安全性,國內很多cms建站系統,比如大家熟悉的dede、phpcms等都過不了等級保護,就是因為漏洞或安全問題,之前我們公司做的幾個網站也是因為安全問題,要求從dede
  • 免費送書 | 《瘋狂前端開發講義-jQuery+AngularJS+Bootstrap前端開發實戰》
    ,並針對每個框架都提供了實用的案例,讓讀者理論聯繫實際。案例既提供了IDE無關的、基於Ant管理的項目源碼,也提供了基於Eclipse IDE的項目源碼,最大限度地滿足讀者的需求。內容介紹本書的重點是新加入的兩個目前十分主流的前端框架:AngularJS 和Bootstrap。
  • 經歷多個中臺項目後,我總結了一套中臺實戰框架
    編輯導語:在前面的系列文章中,作者為大家介紹了中臺MSS建設框架的概念,在本文中我們具體看看要如何實踐MSS框架。作者從理解中臺和建設中臺兩個方面出發,對MSS建設框架進行了詳細闡述,並總結了自己的相關思考,與大家分享。
  • zuihou-admin-cloud 2.1 發布,租戶模式支持動態新增數據源 - OS...
    更新 zuihou-admin-cloud, 待依賴更新完畢後,根據IDEA提示,刪除zuihou-zuul-base、zuihou-zuul-authentication、zuihou-zuul-ratelimit 等模塊2.
  • 動手練一練,做一個響應式的後臺管理面板
    作為一名前端開發者,我們或多或少都會接觸後臺管理系統的製作,你是否會親自純手工製作做還是從網上找源碼改一個呢?
  • Node.js 實戰系列:幫黃老師完善餓了麼項目
    整個後臺項目以egg為框架,mysql作為資料庫,用typescript進行開發,涉及資料庫表十一張,接口四十個左右。在線地址:項目參考基於 vue + element-ui 的後臺管理系統[4]註:對於後臺管理系統,我這邊只參考了 基於 vue + element-ui 的後臺管理系統 的業務邏輯,代碼方面沒有深究,因為用的技術棧不太一樣。
  • 過去三年使用前端框架的感受
    (大概是 16 年底到 17 年中),我想沒有人會否認 Angularjs 在前端框架方面所作出的貢獻,它所提倡的聲明式 UI 在後來變成了前端開發的主流。不過即使這段 Vue2 使用經歷並不算愉快,我仍然認為 Vue2 是一個非常成功的框架,它讓我們在很短時間內完成了遷移。
  • SSM框架集成之用戶登錄功能的實現
    咱們已經分享了Spring Mybatis SpringMVC 三個框架今天來把這三個框架整合一下還記得之前又給大家分享過整合 Spring Mybatis 框架的項目,今天就在那個項目的基礎上,來把 springMVC 整合進去 SSM框架的整合
  • 《西遊記》中後臺最硬的妖怪排行,青牛精竟然不是第一
    《西遊記》中後臺最硬的妖怪排行,青牛精竟然不是第一 《西遊記》中後臺最大的妖怪是誰? 《西遊記》中,唐僧師徒一路西行,求取真經,宣揚佛法,歷經艱難險阻。在這許多的困難面前,萬水千山的阻隔只是次要的,最大的困難就是一路上妖怪的阻攔。
  • 萬科海外:與VOI訂約各方訂立新管理服務框架協議
    來源:中國網地產中國網地產訊 7日晚間,萬科海外發布公告稱,VOI訂約各方與萬科香港訂約各方訂立新管理服務框架協議,據此萬科香港訂約各方將獨家委聘VOI訂約各方向萬科香港訂約各方及萬科房地產發展及投資項目中擁有權益的其他附屬公司提供管理服務,
  • 【第367期】web框架模塊設計三國演義篇
    前言哈,這篇作者是個三國迷嗎?用的人物都好形象,太通俗易懂了。
  • 需求精益思想在項目管理中的實戰應用
    二、項目概述檔案管理是一款功能需求性強、配置靈活、使用簡潔的檔案管理系統。可以為用戶提供便捷的文件資料管理服務,同時提供評審、搜索、借閱等管理服務。三、項目全景圖從項目基本概述到全景圖大家應該對檔案管理項目在心中有個簡易框架了,此時各位心裡可能有些疑問,項目管理在當前信息爆炸時代有很多套路來指引,例如:項目經理三板斧(抓業務、組團隊、建流程)、PMP中標準環節5大過程組等,考過PMP的同學應該很熟悉了在此我就不一一舉例了
  • 備戰2021考研,管理類聯考實戰中總結出的高分經驗
    邏輯篇題型分布備考到了最後階段,必須要明白,邏輯30道題,由不同題型組成,如果到現在答題時還每道題感覺都一樣,不知如何作答,需要好好總結反思。做題策略學長學姐的實戰經驗表明,30道邏輯題請遵循「三遍做題法」。
  • 應用Web框架模塊設計三國演義篇
    從事Web開發已經10年時間,近幾年也一直從事微博應用產品的研發。從原生php寫網站到使用cms bbs整合的大型站點,從使用各種流行的開源開發框架到成熟穩定的平臺級框架下做研發。這期間對應用型web開發框架設計有一些自己的理解和見解,在這裡和大家一起分享交流一下。為了讓大家對框架的各個模塊有較深的理解,我對模塊職能角色匹配了三國人物,在這裡純屬為了增加大家的趣味性理解,如有不同見解可以在後面使勁得拍磚:)。
  • 從0到1造個小程序 · 實戰篇6:後端資料庫設計&雲函數編寫
    今天給大家帶來的是學習專題——從0到1造個小程序 的實戰篇6:後端資料庫設計&雲函數編寫。前面的實戰篇,我們已經一步步走下來,將咱們的小程序時間管理小助手包含的4個頁面:首頁、事項詳情頁、事項計時頁、記錄總結頁,完成了他們的頁面設計和邏輯設計。
  • 2016合集目錄【程序化廣告實戰】
    呈上乾貨目錄:數字營銷職業雞湯:來篇雞湯 - 數字營銷人2017職業規劃參考「未來3-5年」問題?5.一年內最少1次聚餐1小時見面私聊,吳俊老師悉心介紹行業現狀及各玩家比對。6.可以隨時撥打吳俊老師的電話熱線諮詢各種問題。晚21點前,不限時不限次7.可做嘉賓在線下流水課對學員分享產品內容。不限次8.可在「程序化廣告實戰」訂閱號中免費發布產品宣傳及招聘文章。
  • near, nearby, next和close用法區別,都可以表示「近的」
    今天我們來學習near, nearby, next和close的用法。to/near意味著你離某物很近,沒有並排,彼此相鄰。We've found a great new restaurant near the office.我們在辦公室附近發現了一家很棒的新餐館。 2,close 一般必須帶to,near不帶to,close to=near。