前端打包成桌面應用、以及chrome擴展

来源:http://www.cnblogs.com/cqhaibin/archive/2017/08/02/7275863.html
-Advertisement-
Play Games

前段時間在利用工作之餘開發了tomato timer這個蕃茄鐘,然後部署到github.io上,由於greatway太厲害,偶爾會有打不開的情況。上周末對比做了擴展和改進,使其成為chrome的插件,或者成為桌面app。 chrome插件的使用與開發 一、如何安裝與使用: 1、下載tomato ti ...


     前段時間在利用工作之餘開發了tomato timer這個蕃茄鐘,然後部署到github.io上,由於greatway太厲害,偶爾會有打不開的情況。上周末對比做了擴展和改進,使其成為chrome的插件,或者成為桌面app。

chrome插件的使用與開發

一、如何安裝與使用:

1、下載tomato timer項目,github地址 https://github.com/cqhaibin/tomato-timer.git

2、切換到V2.0.0.0的tag,然後如下圖所配置:

3、然後單擊 “小飛”圖標即可使用,界面如下圖:

二、打包源碼簡單介紹

本chrome插件的實現思路:插件開發是通過vue、vuex等實現的;然後通過rollup打包成為一個獨立的js文件(tomatoTimer.js);最後配置chrome插件的manifest.json文件即可。

1、如何通過rollup把vue項目獨立打包成一個js文件,代碼片段如下:

 

var VueLoader = require('rollup-plugin-vue');
var Resolve = require('rollup-plugin-node-resolve');
var Commonjs = require("rollup-plugin-commonjs");
var replace = require('rollup-plugin-replace');
var path = require('path');
var babel = require('rollup-plugin-babel');
var paths = require("./paths");
var rollup = require('rollup');
var type = process.env.TYPE;

let config = {
    entry: path.resolve(__dirname, paths[type].source),
    plugins: [VueLoader(), babel({
      exclude: 'node_modules/**' // only transpile our source code
    }), Resolve({
    // pass custom options to the resolve plugin
    customResolveOptions: {
      moduleDirectory: 'node_modules'
    },
    jsnext: true,
    main: true,
    browser:true
  }), Commonjs(), replace({
    'process.env.NODE_ENV': JSON.stringify('development'),
    'process.env.VUE_ENV': JSON.stringify('browser')
  })]
};
rollup.rollup(config).then(function(bundle){
    bundle.write({
        format: 'iife',
        moduleName: "tomato",
        sourceMap: true,
        dest: path.resolve(__dirname, paths[type].dest)
    });
});

這裡利用了rollup-plugin-replace插件替換vue中的一些配置,不加此插件在browser中運行時會報錯。

2、對vue的引用需要註意,由於vue2.0開始,vue提供的文件分為runtime、compile等類型,所以要直接指定,如下代碼所示:

import Vue from 'vue/dist/vue.js';

此代碼在項目的aloneindex.js文件中。

3. chrome插件的配置

{
    "manifest_version": 2,
    "name": "tomato timer",
    "version": "1.0.0.0",
    "description": "tomato timer",
    "icons": {
        "16": "icons/tomatotimer-16.png",
        "48": "icons/tomatotimer-48.png",
        "64": "icons/tomatotimer-64.png",
        "128": "icons/tomatotimer-128.png"
    },
    "author": "sam long",
    "permissions": [
        "tabs", //可訪問tab
        "storage" //可以訪問本地存儲
    ],
    //右鍵單擊右上角插件logo時,彈出的視窗
    "options_page": "view/options.html",
    //左鍵單擊右上角插件logo時,彈出的視窗
    "browser_action": {
        "default_icon": {
            "38": "icons/tomatotimer-48.png"
        },
        //"default_popup": "view/popup.html",
        "default_title": "tomato timer"
    },
    //後臺運行的js進程對象
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "content_security_policy": "script-src 'unsafe-eval'; object-src 'unsafe-eval'"
}

此配置只是實現一個chrome插件的簡單配置,更多配置可以參考baidu。其中較為重要為background節點的配置,因為他能響應chrome插件上的行為,如你單擊瀏覽器地址欄旁邊的圖標事件就需在此文件中捕獲。background.js代碼如下:

chrome.browserAction.onClicked.addListener(function(tab) {
    var destUrl = './index.html';
    chrome.tabs.create({ url: destUrl });
});

然後則是content_security_policy節點,他簡稱csp策略,預設chrome插件只會加同域下的安全文件夾下的js。所以此處要設置unsafe-eval。更多配置如下:

說明
self 同域(預設)
unsafe-inline 行內js可以執行
unsafe-eval 本地js文件可以執行
none  

4. 註意

    1. browser_action中的default_popup有配置值時,chrome.browserAction.onClicked.addListener事件不會被觸發

桌面App打包

一、此打包需要安裝如下兩個npm包:

electron:可將前端項目包裝成為一個桌面app,並且他還提供了一系統的對操作系統的訪問

electron-packager:發佈桌面app

二、安裝好後,對package.json文件進行如下配置

"name": "simple",
"version": "1.0.0",
"main": "electron/main.js",

這三個節點是必須的,且main會作為electron的入口文件。

三、運行.\node_modules\.bin\electron . 即可看到如下界面:

四、利用electron-packager打包,輸入如下命令後,就等待他的完成吧。

.\node_modules\.bin\electron-packager . tomatoTimer --out ./outApp

 

補充:

如果打包時間過長,或者直接打包失敗(尤其是在windows平臺),有如下兩種情況:

  1. 使用的是cnpm進行的包安裝,由於cnpm安裝是扁平的,一下子展開node_modules文件夾太多,很有可能時間過長或者失敗
  2. 沒有忽略掉node_moduels中的包,使用如下命令忽略掉node_moduels包: electron-packager ./ tomatoTimer --out ./outApp --overwrite --ignore=node_modules

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於Spring Cloud的微服務構建學習-1 基礎知識 什麼是微服務架構 微服務是系統架構上的一種設計風格,它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RESTful API進行通信協議。 每個微服務都維護者自身的數據存儲、業 ...
  • 分散式系統中主要的問題就是如何保持節點狀態的一致性,不論發生任何failure,只要集群中大部分的節點可以正常工作,則這些節點具有相同的狀態,保持一致,在client看來相當於一臺機器。 一致性問題本質就是replicated state machines,即所有結點都從同一個state出發,都經過 ...
  • HashMap 簡介 Java為數據結構中的映射定義了一個介面java.util.Map,此介面主要有四個常用的實現類,分別是HashMap、Hashtable、LinkedHashMap和TreeMap,類繼承關係如下圖所示: 下麵針對各個實現類的特點做一些說明: (1) HashMap:它根據鍵 ...
  • 網頁中插入圖像 ================== 針對普通類圖片 IMG vs CSS background image 使用IMG 圖像是內容的一部分 網站logo如 "支付寶註冊頁面" 、圖表、照片人物等與上下文有關的,需要使用atl屬性 利於搜索引擎、屏幕閱讀器 對於輪播圖等需要JavaS ...
  • 閉包(Closure) 本文聚焦於回答2個問題: 1. 在全局作用域中,如何讀取函數內部的局部變數? 2. 在全局作用域中,如何修改函數內部的局部變數? 變數作用域 JavaScript語言的作用域,一句話概括就是:內層函數可以訪問外層函數的變數,而外層函 數不可以訪問內層函數的變數。 在內層函數中 ...
  • 1.正則表達式基本語法 兩個特殊的符號'^'和'$'。他們的作用是分別指出一個字元串的開始和結束。例子如下: "^The":表示所有以"The"開始的字元串("There","The cat"等); "of despair$":表示所以以"of despair"結尾的字元串; "^abc$":表示開 ...
  • 剛開始為了實現:篩選菜單彈出來:禁止頁面滑動,菜單收回去:允許頁面滑動,真是煞費苦心啊,以前在jquery/bootstrap上面用的老辦法都物是人非,哎…… 那些因為年輕犯的錯: ...
  • 前面的話 修飾器(Decorator)是一個函數,用來修改類的行為。本文將詳細介紹ES2017中的修飾器Decorator 概述 ES2017 引入了這項功能,目前 Babel 轉碼器已經支持Decorator 首先,安裝babel-core和babel-plugin-transform-decor ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...