成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何開發(fā)一個Atom插件-創(chuàng)新互聯(lián)

小編給大家分享一下如何開發(fā)一個Atom插件,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

站在用戶的角度思考問題,與客戶深入溝通,找到臨城網站設計與臨城網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、成都網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、域名與空間、網站空間、企業(yè)郵箱。業(yè)務覆蓋臨城地區(qū)。

最近用Atom寫博客比較多,然后發(fā)現(xiàn)一個很嚴重的問題。。

沒有一個我想要的上傳圖片的方式,比如某乎上邊就可以直接copy/paste文件,然后進行上傳。

然而在Atom上沒有找到類似的插件,最接近的一個,也還是需要手動選擇文件,然后進行上傳。

這個操作流程太繁瑣,索性自己寫一個插件用好了。

成品插件下載地址:https://atom.io/packages/atom-image-uploader

規(guī)劃

首先,我們確定了需求,要通過可以直接copy文件,然后在Atom中paste即可完成上傳的操作。
確定了以后,我們就要開始搬磚了。

插件開發(fā)

因為Atom是一個Electron應用:https://electronjs.org

是使用JavaScript來開發(fā)的桌面應用,所以對于一個前端來說,簡直是太美好了。
我們先去翻看Atom的官方文檔,查看關于創(chuàng)建插件相關的操作:
首先我們在Atom中打開命令面板,然后輸入Generate Package

如何開發(fā)一個Atom插件

按下回車后,將會彈出一個對話框,在框中輸入要建立的包名即可完成一個Package的創(chuàng)建。

如何開發(fā)一個Atom插件

Atom會生成一套默認文件,并打開一個新的窗口。

項目結構

生成的插件目錄如下:

.
├── keymaps
│   └── first-package.json
├── lib
│   ├── first-package-view.js
│   └── first-package.js
├── menus
│   └── first-package.json
├── package.json
├── spec
│   ├── first-package-spec.js
│   └── first-package-view-spec.js
└── styles
    └── first-package.less

keymaps

這里可以配置要監(jiān)聽的快捷鍵,我們可以設置一些自定義快捷鍵來觸發(fā)一些我們插件的行為。

{
  "atom-workspace": {
    "ctrl-alt-o": "first-package:toggle"
  }
}

我們可以添加各種自定義的快捷鍵在這里。
Value的定義為:包名:觸發(fā)的事件名
需要注意的是:
這里配置的快捷鍵還有一個作用域的概念。也就是JSON外邊的那個key。
atom-workspace表示在Atom中生效
atom-text-editor表示只在文本編輯器范圍內生效。

如何開發(fā)一個Atom插件

Atom官方文檔

lib

這里就是存放插件主要代碼的地方了。
默認會生成兩個文件:

  • package.js

  • package.view.js

默認插件生成的主入口文件指向這里。


如何開發(fā)一個Atom插件

入口文件的表現(xiàn)方式為一個JSON對象,可以實現(xiàn)如下幾個函數:

  • activate: 當Package被激活時會執(zhí)行該方法,函數的簽名表示會接受一個state參數,該參數是通過serialize方法傳遞過來的(如果有實現(xiàn)它的話)

  • deactivate: 當Package失效時會出發(fā)的方法,這兩個方法可以理解為React中的componentWillMountcomponentWillUnmount

  • serialize: 也就是上邊說到的那個方法,可以返回一個JSON對象供下次激活后使用

  • 自定義快捷鍵對應的事件名: 每次Package被觸發(fā)對應快捷鍵時都會執(zhí)行的方法

menus

這里存放的是在應用菜單和編輯區(qū)域菜單欄的配置文件

{
  "context-menu": {
    "atom-text-editor": [
      {
        "label": "Toggle first-package",
        "command": "first-package:toggle"
      }
    ]
  },
  "menu": [
    {
      "label": "Packages",
      "submenu": [
        {
          "label": "first-package",
          "submenu": [
            {
              "label": "Toggle",
              "command": "first-package:toggle"
            }
          ]
        }
      ]
    }
  ]
}

context-menu對應的元素會在對應的區(qū)域內右鍵觸發(fā)時顯示。
menu則是出現(xiàn)在Atom主菜單欄上:

如何開發(fā)一個Atom插件

同樣的,context-menu會區(qū)分兩個環(huán)境,text-editorworkspace

spec

這里存放的是一些測試用例,創(chuàng)建Package會生成一些默認的斷言。
寫測試確實是一個好習慣。

styles

如果Package有很多View要展示的話,可以在這里編寫,默認使用的是Less語法。
由于我們只做一個C/V的操作,不會涉及到界面,所以styles直接就刪掉了。

開始搬磚

大致結構已經了解了,我們就可以開始搬磚了。
因為是一個Electron應用,所以我們直接在Atom中按下alt + command + i,呼出我們熟悉的控制臺界面。


如何開發(fā)一個Atom插件

Atom是不會把Electron的各種文檔重新寫一遍的,所以我們現(xiàn)在控制臺里邊試一下我們的猜測是否正確。
一些想要的東西是否存在。

如何開發(fā)一個Atom插件

經過驗證確定了,Electronclipboard對象可以直接在Atom中使用,這就很開心了。

require('electron').clipboard.readImage().toPng()

這樣我們就拿到剪切板中的圖片數據了,一個二進制的數組對象。
我們在觸發(fā)Paste操作時,從clipboard中獲取,如果剪切板中是圖片的話,我們就將它上傳并顯示到編輯器中。
所以,接下來我們要做的就是:

  • 進行上傳圖片的操作

  • 將上傳后的圖片顯示到編輯器中

上傳圖片

上傳圖片我們選擇的是七牛,我們選擇七牛來作為圖床使用,因為他家提供了10GB的免費存儲,灰常適合自己這樣的筆記型博客。
但是用他家SDK時發(fā)現(xiàn)一個問題。。我將二進制數據轉換為ReadStream后上傳的資源損壞了-.-目前還沒有找到原因。
所以我們做了曲線救國的方式。
將剪切板中的數據轉換為Buffer然后暫存到本地,通過本地文件的方式來進行上傳七牛。
在操作完成后我們再將臨時文件移除。

try {
  let buffer = clipboard.readImage().toPng()
  let tempFilePath = 'XXX'
  fs.writeFileSync(tempFilePath, Buffer.from(buffer))
} catch (e) {
  // catch error
} finally {
  fs.unlink(tempFilePath) // 因為我們并不依賴于刪除成功的回調,所以直接空調用異步方法即可
}

將上傳后的資源顯示到編輯器中

因為考慮到上傳可能會受到網絡影響,從而上傳時間不可預估。
所以我們會先在文件中顯示一部分占位文字。
通過全局的atom對象可以拿到當前活躍的窗口:

let editor = atom.workspace.getActiveTextEditor()

為了避免同時上傳多張圖片時出現(xiàn)問題,我們將臨時文件名作為填充的一部分。

editor.insertText(`![](${placeHolderText})`, editor)

然后在上傳成功后,我們將對應的填充字符替換為上傳后的URL就可以了。

editor.scan(new RegExp(placeHolderText), tools => tools.replace(url))

scan方法接收一個正則對象和回調函數。
我們將前邊用到的占位文本作為正則對象,然后在回調將其替換為上傳后的url
至此,我們的代碼已經編寫完了,剩下的就是一些交互上的優(yōu)化。

完成后的效果圖:


如何開發(fā)一個Atom插件

以及,最后:我們要進行Package的上傳。

上傳開發(fā)完的Package

首先我們需要保證package.json中存在如下幾個參數:

  1. name
  2. description
  3. repository

我們可以先使用如下命令來檢查包名是否沖突。

apm show 你的包名

如果沒有沖突,我們就可以直接執(zhí)行以下命令進行上傳了。

apm publish 你的包名

后續(xù)的代碼修改,只需在該包的目錄下執(zhí)行:

apm publish

一些可選的參數:

  1. major,增加版本號的第一位1.0.0 ->2.0.0
  2. minor,增加版本號的第二位0.1.0 ->0.2.0
  3. patch,增加版本號的第三位0.0.1 ->0.0.2

通過apm help可以獲取到更多的幫助信息。

看完了這篇文章,相信你對如何開發(fā)一個Atom插件有了一定的了解,想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章名稱:如何開發(fā)一個Atom插件-創(chuàng)新互聯(lián)
本文網址:http://jinyejixie.com/article34/ghcse.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站導航動態(tài)網站、品牌網站設計、全網營銷推廣、外貿建站自適應網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

手機網站建設
遂宁市| 玉树县| 定结县| 临清市| 绥德县| 耒阳市| 武陟县| 庆安县| 波密县| 江永县| 故城县| 北海市| 抚宁县| 汝阳县| 恩施市| 明溪县| 小金县| 苏尼特右旗| 定南县| 镇远县| 姜堰市| 谢通门县| 江川县| 寿宁县| 高陵县| 勃利县| 广东省| 宜宾市| 吉隆县| 都匀市| 修文县| 桐梓县| 大余县| 山东省| 库伦旗| 鄂伦春自治旗| 广汉市| 桂平市| 新密市| 葫芦岛市| 临清市|