前段时间在利用工作之余开发了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

前端打包成桌面应用、以及chrome扩展的更多相关文章

  1. 用node-webkit把web应用打包成桌面应用

    node-webkit是一个Chromium和node.js上的结合体,通过它我们可以把建立在chrome浏览器和node.js上的web应用打包成桌面应用,而且还可以跨平台的哦.很显然比起传统的桌面 ...

  2. Electron把网页打包成桌面应用并进行源码加密

    前言 最近想把自己用html+css+js做的网页界面打包成桌面应用,网上一搜,发现Electron是一个不错的选择,试了试,发现效果真的不错.这里记录一下打包过程以作记录,便于自己以后查看学习. 一 ...

  3. nodejs打包成桌面程序(exe)的进阶之路

    nodejs打包成桌面程序(exe)的进阶之路 node js bat 前端 计划任务 前言:最近的研究,请大佬们细品 第一篇 - 任务计划程序篇 说真的研究到将nodejs打包成可执行的exe文件是 ...

  4. electron将网站打包成桌面应用

    需求同 NW.js将网站打包成桌面应用 1. 从github上克隆electron示例项目 git clone https://github.com/electron/electron-quick-s ...

  5. 2、node-webkit运行web应用,node-webkit把web应用打包成桌面应用

    下面我通过一个简单的demo来介绍怎么样把一个web应用打包成一个可执行文件(这里只介绍windows环境) 首先新建一个index.html文件,作为我们这个demo的入口页面,我们暂且就把这个页面 ...

  6. 推荐一个可以把网页背景色调成护眼色的Chrome扩展应用

    程序员一天有10几个小时要面对着电脑,老是这种白晃晃的屏幕,谁的眼睛受得了? 我在网上逛了一圈,找到一个比较实用的Chrome扩展应用,可以一键实现将Chrome打开网页的背景色修改成护眼的豆沙绿,这 ...

  7. electron 打包成桌面运用

    最近在学习nodejs,得知Electron是通过将Chromium和Node.js合并到同一个运行时环境中,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一门技术.对于之前一直从 ...

  8. electron打包成桌面应用程序的详细介绍

    1.前提条件 a. 安装了node b.安装了electron c.你知道自己写的东西(js,css,html等等)放在那个文件夹(假设这个文件夹命名为 app,下面会用到)中 2.安装electro ...

  9. Electron:将前端应用打包成桌面应用

    首先戳我下载安装对应版本的node.js. 安装完成后,打开命令行输入node -v以及npm -v查看对应版本.能够正常显示说明安装成功. 写一个最简单的hello world的nodejs应用.n ...

随机推荐

  1. css边框动画

    <div class="button">hover me to change</div> .button{ width:200px; height:60px ...

  2. selenium使用遇到的问题(selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.)

    1.安装pip3 install selenium 2.使用browser=webdriver.Chrome()时报错 :selenium.common.exceptions.WebDriverExc ...

  3. Android进阶:五、RxJava2源码解析 2

    上一篇文章Android进阶:四.RxJava2 源码解析 1里我们讲到Rxjava2 从创建一个事件到事件被观察的过程原理,这篇文章我们讲Rxjava2中链式调用的原理.本文不讲用法,仍然需要读者熟 ...

  4. 推荐一款免费的PDF转换工具 | PDFCandy

    相信大家在用的PDF转换工具也很多,下面良心推荐这款软件(PDFCandy)给大家,方便在今后的工作中进行运用.提高大家的工作效率. PDFCandy分为两种:网页端和客户端.(根据大家的喜好度来进行 ...

  5. centos7.x 安装 fastDFS

    环境准备 使用的系统软件 名称 说明 centos 7.x libfatscommon FastDFS分离出的一些公用函数包 FastDFS FastDFS本体 fastdfs-nginx-modul ...

  6. 动态规划——Best Time to Buy and Sell Stock IV

    这是这个系列题目的第四个,题目大意和之前的差不多,但是这次提供最多k次的操作,操作还是不能同时操作即必须结束前一个操作才能进行后一个操作. 状态比较好理解,就是题目要求的缩小版,dp[k][i]表示进 ...

  7. Ecust OJ

    1 #include <bits/stdc++.h> using namespace std ; struct bigInt { ] ; int size ; ; private : vo ...

  8. Linux指令集

    最近在学习Linux虚拟机,下面是我在学习虚拟机的过程中使用过的一些指令,及其作用. pwd-> 列出当前目录路径 ls-> 列出当前目录列表 cd-> 改变目录 mkdir-> ...

  9. Openstack的视频学习

    0.安装环境准备 部署架构: 网络模式(红色Net0为管理网络,Net1接外网,Net2是接虚拟机网络流量的): 虚拟化平台为VirtualBox,虚拟网络Host-Only网络的配置: Net0:管 ...

  10. node08

    ---恢复内容开始--- 1.Axios 1)基于promise的HTTP库,可用在浏览器或nodejs中 2)使用方法: 在模块内使用需要挂载到Vue对象上: Vue.prototype.$axio ...