diff --git a/README.md b/README.md index fc2c2ae..f8ade74 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,13 @@ Here's [a blog post explaining it](https://60devs.com/hot-reloading-for-chrome-e - Works by checking timestamps of files - Supports nested directories - Automatically disables itself in production -- And it's just a 50 lines of code! +- And it's just 50 lines of code! + +## Options + +| Name | Value | Description | +|--------------|----------------------------|----------------------------------------| +| `reloadTab` | `boolean` (default: true) | reload the active tab when crx changes.| ## How To Use @@ -31,4 +37,10 @@ It is also available as NPM module: npm install crx-hotreload ``` -Then use a `require` (or `import`) to execute the script. +In your script: +``` +const hotReload = require('crx-hotreload'); +hotReload.default({ + reloadTab: false +}); +``` diff --git a/hot-reload.js b/hot-reload.js index de5e58c..572fe6d 100644 --- a/hot-reload.js +++ b/hot-reload.js @@ -17,36 +17,53 @@ const timestampForFilesInDirectory = dir => filesInDirectory (dir).then (files => files.map (f => f.name + f.lastModifiedDate).join ()) -const reload = () => { +const reload = (reloadTab) => { - chrome.tabs.query ({ active: true, currentWindow: true }, tabs => { // NB: see https://github.com/xpl/crx-hotreload/issues/5 + if (reloadTab) { + chrome.tabs.query ({ active: true, currentWindow: true }, tabs => { // NB: see https://github.com/xpl/crx-hotreload/issues/5 - if (tabs[0]) { chrome.tabs.reload (tabs[0].id) } + if (tabs[0]) { chrome.tabs.reload (tabs[0].id) } + chrome.runtime.reload () + }) + } else { chrome.runtime.reload () - }) + } } -const watchChanges = (dir, lastTimestamp) => { +const watchChanges = (dir, reloadTab, lastTimestamp) => { timestampForFilesInDirectory (dir).then (timestamp => { if (!lastTimestamp || (lastTimestamp === timestamp)) { - setTimeout (() => watchChanges (dir, timestamp), 1000) // retry after 1s + setTimeout (() => watchChanges (dir, reloadTab, timestamp), 1000) // poll every 1s } else { - reload () + reload (reloadTab) } }) } -chrome.management.getSelf (self => { - - if (self.installType === 'development') { - - chrome.runtime.getPackageDirectoryEntry (dir => watchChanges (dir)) +const defaultOpts = { + reloadTab: true +}; + +if (typeof module === 'object') { + exports.default = (opts) => { + const combinedOpts = Object.assign({}, defaultOpts, opts); + chrome.management.getSelf (self => { + if (self.installType === 'development') { + chrome.runtime.getPackageDirectoryEntry (dir => watchChanges (dir, combinedOpts.reloadTab)) + } + }) } -}) +} else { + chrome.management.getSelf (self => { + if (self.installType === 'development') { + chrome.runtime.getPackageDirectoryEntry (dir => watchChanges (dir, defaultOpts.reloadTab)) + } + }) +}