547 lines
12 KiB
JavaScript
547 lines
12 KiB
JavaScript
|
"use strict";
|
||
|
/**
|
||
|
* @module BrowserSync.options
|
||
|
*/
|
||
|
module.exports = {
|
||
|
|
||
|
/**
|
||
|
* Browsersync includes a user-interface that is accessed via a separate port.
|
||
|
* The UI allows to controls all devices, push sync updates and much more.
|
||
|
* @property ui
|
||
|
* @type Object
|
||
|
* @param {Number} [port=3001]
|
||
|
* @param {Number} [weinre.port=8080]
|
||
|
* @since 2.0.0
|
||
|
* @default false
|
||
|
*/
|
||
|
ui: {
|
||
|
port: 3001,
|
||
|
weinre: {
|
||
|
port: 8080
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Browsersync can watch your files as you work. Changes you make will either
|
||
|
* be injected into the page (CSS & images) or will cause all browsers to do
|
||
|
* a full-page refresh.
|
||
|
* @property files
|
||
|
* @type Array|String
|
||
|
* @default false
|
||
|
*/
|
||
|
files: false,
|
||
|
|
||
|
/**
|
||
|
* Specify which file events to respond to.
|
||
|
* Available events: `add`, `change`, `unlink`, `addDir`, `unlinkDir`
|
||
|
* @property watchEvents
|
||
|
* @type Array
|
||
|
* @default ["change"]
|
||
|
* @since 2.18.8
|
||
|
*/
|
||
|
watchEvents: ["change"],
|
||
|
|
||
|
/**
|
||
|
* File watching options that get passed along to [Chokidar](https://github.com/paulmillr/chokidar).
|
||
|
* Check their docs for available options
|
||
|
* @property watchOptions
|
||
|
* @type Object
|
||
|
* @default undefined
|
||
|
* @since 2.6.0
|
||
|
*/
|
||
|
watchOptions: {
|
||
|
ignoreInitial: true
|
||
|
/*
|
||
|
persistent: true,
|
||
|
|
||
|
ignored: '*.txt',
|
||
|
followSymlinks: true,
|
||
|
cwd: '.',
|
||
|
|
||
|
usePolling: true,
|
||
|
alwaysStat: false,
|
||
|
depth: undefined,
|
||
|
interval: 100,
|
||
|
|
||
|
ignorePermissionErrors: false,
|
||
|
atomic: true
|
||
|
*/
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Use the built-in static server for basic HTML/JS/CSS websites.
|
||
|
* @property server
|
||
|
* @type Object|Boolean
|
||
|
* @default false
|
||
|
*/
|
||
|
server: false,
|
||
|
|
||
|
/**
|
||
|
* Proxy an EXISTING vhost. Browsersync will wrap your vhost with a proxy URL to view your site.
|
||
|
* @property proxy
|
||
|
* @type String|Object|Boolean
|
||
|
* @param {String} [target]
|
||
|
* @param {Boolean} [ws] - Enable websocket proxying
|
||
|
* @param {Function|Array} [middleware]
|
||
|
* @param {Function} [reqHeaders]
|
||
|
* @param {Array} [proxyReq]
|
||
|
* @param {Array} [proxyRes]
|
||
|
* @default false
|
||
|
*/
|
||
|
proxy: false,
|
||
|
|
||
|
/**
|
||
|
* @property port
|
||
|
* @type Number
|
||
|
* @default 3000
|
||
|
*/
|
||
|
port: 3000,
|
||
|
|
||
|
/**
|
||
|
* @property middleware
|
||
|
* @type Function|Array
|
||
|
* @default false
|
||
|
*/
|
||
|
middleware: false,
|
||
|
|
||
|
/**
|
||
|
* Add additional directories from which static
|
||
|
* files should be served. Should only be used in `proxy` or `snippet`
|
||
|
* mode.
|
||
|
* @property serveStatic
|
||
|
* @type Array
|
||
|
* @default []
|
||
|
* @since 2.8.0
|
||
|
*/
|
||
|
serveStatic: [],
|
||
|
|
||
|
/**
|
||
|
* Options that are passed to the serve-static middleware
|
||
|
* when you use the string[] syntax: eg: `serveStatic: ['./app']`. Please see
|
||
|
* [serve-static](https://github.com/expressjs/serve-static) for details
|
||
|
*
|
||
|
* @property serveStaticOptions
|
||
|
* @type Object
|
||
|
* @since 2.17.0
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Enable https for localhost development. **Note** - this is not needed for proxy
|
||
|
* option as it will be inferred from your target url.
|
||
|
* @property https
|
||
|
* @type Boolean
|
||
|
* @default undefined
|
||
|
* @since 1.3.0
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Override http module to allow using 3rd party server modules (such as http2)
|
||
|
* @property httpModule
|
||
|
* @type string
|
||
|
* @default undefined
|
||
|
* @since 2.18.0
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Clicks, Scrolls & Form inputs on any device will be mirrored to all others.
|
||
|
* @property ghostMode
|
||
|
* @param {Boolean} [clicks=true]
|
||
|
* @param {Boolean} [scroll=true]
|
||
|
* @param {Boolean} [location=true]
|
||
|
* @param {Boolean} [forms=true]
|
||
|
* @param {Boolean} [forms.submit=true]
|
||
|
* @param {Boolean} [forms.inputs=true]
|
||
|
* @param {Boolean} [forms.toggles=true]
|
||
|
* @type Object
|
||
|
*/
|
||
|
ghostMode: {
|
||
|
clicks: true,
|
||
|
scroll: true,
|
||
|
location: true,
|
||
|
forms: {
|
||
|
submit: true,
|
||
|
inputs: true,
|
||
|
toggles: true
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Can be either "info", "debug", "warn", or "silent"
|
||
|
* @property logLevel
|
||
|
* @type String
|
||
|
* @default info
|
||
|
*/
|
||
|
logLevel: "info",
|
||
|
|
||
|
/**
|
||
|
* Change the console logging prefix. Useful if you're creating your
|
||
|
* own project based on Browsersync
|
||
|
* @property logPrefix
|
||
|
* @type String
|
||
|
* @default BS
|
||
|
* @since 1.5.1
|
||
|
*/
|
||
|
logPrefix: "BS",
|
||
|
|
||
|
/**
|
||
|
* @property logConnections
|
||
|
* @type Boolean
|
||
|
* @default false
|
||
|
*/
|
||
|
logConnections: false,
|
||
|
|
||
|
/**
|
||
|
* @property logFileChanges
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
logFileChanges: true,
|
||
|
|
||
|
/**
|
||
|
* Log the snippet to the console when you're in snippet mode (no proxy/server)
|
||
|
* @property logSnippet
|
||
|
* @type: Boolean
|
||
|
* @default true
|
||
|
* @since 1.5.2
|
||
|
*/
|
||
|
logSnippet: true,
|
||
|
|
||
|
/**
|
||
|
* You can control how the snippet is injected
|
||
|
* onto each page via a custom regex + function.
|
||
|
* You can also provide patterns for certain urls
|
||
|
* that should be ignored from the snippet injection.
|
||
|
* @property snippetOptions
|
||
|
* @since 2.0.0
|
||
|
* @param {Boolean} [async] - should the script tags have the async attribute?
|
||
|
* @param {Array} [blacklist]
|
||
|
* @param {Array} [whitelist]
|
||
|
* @param {RegExp} [rule.match=/$/]
|
||
|
* @param {Function} [rule.fn=Function]
|
||
|
* @type Object
|
||
|
*/
|
||
|
snippetOptions: {
|
||
|
async: true,
|
||
|
whitelist: [],
|
||
|
blacklist: [],
|
||
|
rule: {
|
||
|
match: /<body[^>]*>/i,
|
||
|
fn: function (snippet, match) {
|
||
|
return match + snippet;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Add additional HTML rewriting rules.
|
||
|
* @property rewriteRules
|
||
|
* @since 2.4.0
|
||
|
* @type Array
|
||
|
* @default false
|
||
|
*/
|
||
|
rewriteRules: [],
|
||
|
|
||
|
/**
|
||
|
* @property tunnel
|
||
|
* @type String|Boolean
|
||
|
* @default null
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Some features of Browsersync (such as `xip` & `tunnel`) require an internet connection, but if you're
|
||
|
* working offline, you can reduce start-up time by setting this option to `false`
|
||
|
* @property online
|
||
|
* @type Boolean
|
||
|
* @default undefined
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Decide which URL to open automatically when Browsersync starts. Defaults to "local" if none set.
|
||
|
* Can be `true`, `local`, `external`, `ui`, `ui-external`, `tunnel` or `false`
|
||
|
* @property open
|
||
|
* @type Boolean|String
|
||
|
* @default true
|
||
|
*/
|
||
|
open: "local",
|
||
|
|
||
|
/**
|
||
|
* @property browser
|
||
|
* @type String|Array
|
||
|
* @default default
|
||
|
*/
|
||
|
browser: "default",
|
||
|
|
||
|
/**
|
||
|
* Add HTTP access control (CORS) headers to assets served by Browsersync.
|
||
|
* @property cors
|
||
|
* @type boolean
|
||
|
* @default false
|
||
|
* @since 2.16.0
|
||
|
*/
|
||
|
cors: false,
|
||
|
|
||
|
/**
|
||
|
* Requires an internet connection - useful for services such as [Typekit](https://typekit.com/)
|
||
|
* as it allows you to configure domains such as `*.xip.io` in your kit settings
|
||
|
* @property xip
|
||
|
* @type Boolean
|
||
|
* @default false
|
||
|
*/
|
||
|
xip: false,
|
||
|
|
||
|
hostnameSuffix: false,
|
||
|
|
||
|
/**
|
||
|
* Reload each browser when Browsersync is restarted.
|
||
|
* @property reloadOnRestart
|
||
|
* @type Boolean
|
||
|
* @default false
|
||
|
*/
|
||
|
reloadOnRestart: false,
|
||
|
|
||
|
/**
|
||
|
* The small pop-over notifications in the browser are not always needed/wanted.
|
||
|
* @property notify
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
notify: true,
|
||
|
|
||
|
/**
|
||
|
* @property scrollProportionally
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
scrollProportionally: true,
|
||
|
|
||
|
/**
|
||
|
* @property scrollThrottle
|
||
|
* @type Number
|
||
|
* @default 0
|
||
|
*/
|
||
|
scrollThrottle: 0,
|
||
|
|
||
|
/**
|
||
|
* Decide which technique should be used to restore
|
||
|
* scroll position following a reload.
|
||
|
* Can be `window.name` or `cookie`
|
||
|
* @property scrollRestoreTechnique
|
||
|
* @type String
|
||
|
* @default 'window.name'
|
||
|
*/
|
||
|
scrollRestoreTechnique: "window.name",
|
||
|
|
||
|
/**
|
||
|
* Sync the scroll position of any element
|
||
|
* on the page. Add any amount of CSS selectors
|
||
|
* @property scrollElements
|
||
|
* @type Array
|
||
|
* @default []
|
||
|
* @since 2.9.0
|
||
|
*/
|
||
|
scrollElements: [],
|
||
|
|
||
|
/**
|
||
|
* Sync the scroll position of any element
|
||
|
* on the page - where any scrolled element
|
||
|
* will cause all others to match scroll position.
|
||
|
* This is helpful when a breakpoint alters which element
|
||
|
* is actually scrolling
|
||
|
* @property scrollElementMapping
|
||
|
* @type Array
|
||
|
* @default []
|
||
|
* @since 2.9.0
|
||
|
*/
|
||
|
scrollElementMapping: [],
|
||
|
|
||
|
/**
|
||
|
* Time, in milliseconds, to wait before
|
||
|
* instructing the browser to reload/inject following a
|
||
|
* file change event
|
||
|
* @property reloadDelay
|
||
|
* @type Number
|
||
|
* @default 0
|
||
|
*/
|
||
|
reloadDelay: 0,
|
||
|
|
||
|
/**
|
||
|
* Wait for a specified window of event-silence before
|
||
|
* sending any reload events.
|
||
|
* @property reloadDebounce
|
||
|
* @type Number
|
||
|
* @default 0
|
||
|
* @since 2.6.0
|
||
|
*/
|
||
|
reloadDebounce: 0,
|
||
|
|
||
|
/**
|
||
|
* Emit only the first event during sequential time windows
|
||
|
* of a specified duration.
|
||
|
* @property reloadThrottle
|
||
|
* @type Number
|
||
|
* @default 0
|
||
|
* @since 2.13.0
|
||
|
*/
|
||
|
reloadThrottle: 0,
|
||
|
|
||
|
/**
|
||
|
* User provided plugins
|
||
|
* @property plugins
|
||
|
* @type Array
|
||
|
* @default []
|
||
|
* @since 2.6.0
|
||
|
*/
|
||
|
plugins: [],
|
||
|
|
||
|
/**
|
||
|
* @property injectChanges
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
injectChanges: true,
|
||
|
|
||
|
/**
|
||
|
* @property startPath
|
||
|
* @type String|Null
|
||
|
* @default null
|
||
|
*/
|
||
|
startPath: null,
|
||
|
|
||
|
/**
|
||
|
* Whether to minify client script, or not.
|
||
|
* @property minify
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
minify: true,
|
||
|
|
||
|
/**
|
||
|
* @property host
|
||
|
* @type String
|
||
|
* @default null
|
||
|
*/
|
||
|
host: null,
|
||
|
|
||
|
/**
|
||
|
* Support environments where dynamic hostnames are not required
|
||
|
* (ie: electron)
|
||
|
* @property localOnly
|
||
|
* @type Boolean
|
||
|
* @default false
|
||
|
* @since 2.14.0
|
||
|
*/
|
||
|
localOnly: false,
|
||
|
|
||
|
/**
|
||
|
* @property codeSync
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
codeSync: true,
|
||
|
|
||
|
/**
|
||
|
* @property timestamps
|
||
|
* @type Boolean
|
||
|
* @default true
|
||
|
*/
|
||
|
timestamps: true,
|
||
|
|
||
|
clientEvents: [
|
||
|
"scroll",
|
||
|
"scroll:element",
|
||
|
"input:text",
|
||
|
"input:toggles",
|
||
|
"form:submit",
|
||
|
"form:reset",
|
||
|
"click"
|
||
|
],
|
||
|
|
||
|
/**
|
||
|
* Alter the script path for complete control over where the Browsersync
|
||
|
* Javascript is served from. Whatever you return from this function
|
||
|
* will be used as the script path.
|
||
|
* @property scriptPath
|
||
|
* @default undefined
|
||
|
* @since 1.5.0
|
||
|
* @type Function
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Configure the Socket.IO path and namespace & domain to avoid collisions.
|
||
|
* @property socket
|
||
|
* @param {String} [path="/browser-sync/socket.io"]
|
||
|
* @param {String} [clientPath="/browser-sync"]
|
||
|
* @param {String|Function} [namespace="/browser-sync"]
|
||
|
* @param {String|Function} [domain=undefined]
|
||
|
* @param {String|Function} [port=undefined]
|
||
|
* @param {Object} [clients.heartbeatTimeout=5000]
|
||
|
* @since 1.6.2
|
||
|
* @type Object
|
||
|
*/
|
||
|
socket: {
|
||
|
socketIoOptions: {
|
||
|
log: false
|
||
|
},
|
||
|
socketIoClientConfig: {
|
||
|
reconnectionAttempts: 50
|
||
|
},
|
||
|
path: "/browser-sync/socket.io",
|
||
|
clientPath: "/browser-sync",
|
||
|
namespace: "/browser-sync",
|
||
|
clients: {
|
||
|
heartbeatTimeout: 5000
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Configure the script domain
|
||
|
* @property script
|
||
|
* @param {String|Function} [domain=undefined]
|
||
|
* @since 2.14.0
|
||
|
* @type Object
|
||
|
*/
|
||
|
|
||
|
tagNames: {
|
||
|
"less": "link",
|
||
|
"scss": "link",
|
||
|
"css": "link",
|
||
|
"jpg": "img",
|
||
|
"jpeg": "img",
|
||
|
"png": "img",
|
||
|
"svg": "img",
|
||
|
"gif": "img",
|
||
|
"js": "script"
|
||
|
},
|
||
|
|
||
|
injectFileTypes: ["css", "png", "jpg", "jpeg", "svg", "gif", "webp", "map"],
|
||
|
excludedFileTypes: [
|
||
|
"js",
|
||
|
"css",
|
||
|
"pdf",
|
||
|
"map",
|
||
|
"svg",
|
||
|
"ico",
|
||
|
"woff",
|
||
|
"json",
|
||
|
"eot",
|
||
|
"ttf",
|
||
|
"png",
|
||
|
"jpg",
|
||
|
"jpeg",
|
||
|
"webp",
|
||
|
"gif",
|
||
|
"mp4",
|
||
|
"mp3",
|
||
|
"3gp",
|
||
|
"ogg",
|
||
|
"ogv",
|
||
|
"webm",
|
||
|
"m4a",
|
||
|
"flv",
|
||
|
"wmv",
|
||
|
"avi",
|
||
|
"swf",
|
||
|
"scss"
|
||
|
]
|
||
|
};
|