
Product
Introducing Socket Scanning for OpenVSX Extensions
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.
@justeat/gulp-build-fozzie
Advanced tools
Gulp build tasks for use across Fozzie modules.
First, add gulp and gulp-build-fozzie as dependencies
yarn add gulp @justeat/gulp-build-fozzie
Next, inside your gulpfile.js, require the build function from @justeat/gulp-build-fozzie, then pass gulp as the first argument.
const gulp = require('gulp');
const { build } = require('@justeat/gulp-build-fozzie');
build(gulp, /*options*/);
You can optionally pass in options which will override the default config values.
That's it! You can now run any of the Gulp tasks.
To ensure that the scripts:bundle task can transpile es2015 code, add a .babelrc file, with the @babel/preset-env preset, to the root of your project:
{
"presets": ["@babel/preset-env"]
}
If you do not add a .babelrc file (you may be writing es5 code for example) then the code will be bundled up as is.
Add an .eslintrc file to the root of your project with the following content to use the JS linting rules we recommend when running the scripts:lint task:
{
"extends": "@justeat/eslint-config-fozzie"
}
If you wish to extend or override these rules you can simply add them after the extends line in the .eslintrc file.
For more information on how you can configure eslint check out the documentation.
N.b. You may also find that you get an error when adding eslint which reads Parsing error: Cannot read property 'ecmaFeatures' of undefined. If you see this message, then add this to your package.json followed by running yarn install:
"resolutions": {
"espree": "3.5.4"
}
This is a temporary fix dependent on the progress of this issue open on ESLint.
To use our recommended fozzie stylelint linting rules add the following into your package.json file:
"stylelint": {
"extends": "@justeat/stylelint-config-fozzie"
}
If you wish to extend or override these rules you can simply add them after the extends line in the package.json file.
For more information on how you can configure stylelint check out the documentation.
You can also access the config and pathBuilder objects which are used inside of gulp-build-fozzie by requiring them:
const { config, pathBuilder } = require('@justeat/gulp-build-fozzie');
These are exposed for convenience, and means that you do not need to manually build paths and maintain a separate config object for any custom tasks in your project. It also reduces duplication and prevents bugs which can arise from specifying incorrect paths.
config objectThis is the config object which is used inside of gulp-build-fozzie, if you have passed any options via the build method they will be available here.
See the Options section below for the details of this object.
pathBuilder objectThe pathBuilder object is used inside of gulp-build-fozzie in order to build the paths used in the gulp tasks.
See the Path Builder section below for details on which paths are available.
cssRuns the following tasks
scss:lintLint all SCSS files in the source directory ā this runs before the css:bundle task.
This task will also automatically fix any errors that it can (through stylelint's autofix setting).
css:lintLint all CSS files in the dist directory ā this runs after the css:bundle task.
clean:cssRemoves any CSS already in the dist directory.
css:bundlePerforms a variety of tasks including;
scriptsRuns the following tasks
scripts:lintLint all JavaScript in the source directory. This task will also attempt to automatically fix any rules via the ESLint --fix flag.
scripts:testRuns any unit tests found in the JavaScript source directory using Jest.
scripts:test:coverageRuns the JS unit tests and display a coverage report once complete.
clean:scriptsRemoves any JavaScript already in the dist directory.
The names of custom tasks can be passed into the config object to be run here. See customTasks for more details.
scripts:bundlePerforms a variety of tasks including;
logger:createFileAdds the server-side file required for the errorLogger to be inserted into the filesystem.
imagesRuns the following tasks
clean:imagesRemoves any images already in the dist directory.
images:optimiseOptimises all images found in the source directory then copies them to the dist directory.
images:svg-spriteGenerate an SVG sprite and copy into the dist directory
It also runs the copy:img and copy:assets tasks.
service-workerRuns the following tasks
service-worker:locateDiscovers scripts in the service worker directory.
service-worker:copyCopies the worker's internal scripts to the dist directory.
service-worker:writeGenerates a service worker to pre-cache the assets defined in the config.
copy:js, copy:css, copy:img, copy:fonts & copy:docsEach of these tasks copies the specified set of assets from the src to the dist asset folders.
See the config section for details on how to configure these tasks.
watchRuns the default task then the following watch tasks.
watch:cssRuns the css task when a CSS file is changed.
watch:scriptsRuns the scripts task when a JavaScript file is changed.
watch:scripts:testRuns the scripts:lint and scripts:test tasks when a JavaScript unit test file is changed.
watch:imagesRuns the images task when an image file is changed.
watch:docsRuns the same tasks as watch as well as the following watch tasks.
watch:docs:templatesRuns the assemble task when documentation files are changed.
docsBuilds a fresh copy of any documentation found in the config.docs.rootDir directory using Assemble, then watches for any file changes and reloads the web page when changes are detected in the config.docs.distDir directory.
docs:deployBuilds the documentation and then pushes the dist directory to the gh-pages branch.
docs:releasePushes the documentation dist directory to the gh-pages branch.
clean:docsRemoves document files already in the docs dist directory.
copy:img:docsCopies all of the images in the assets dist folder over to the docs dist folder.
browser-syncWatches for changes to files and reloads a local website instance.
browser-sync:docsGenerates the documentation files then opens the docs in a local server.
assembleGenerates the documentation files.
Here is the outline of the configuration options, descriptions of each are below.
{
webRootDir,
assetSrcDir,
assetDistDir,
applyRevision,
packageVersion,
css: {
scssDir,
cssDir,
lintPaths,
sourcemaps,
usePackageVersion
},
js: {
files: {
main: {
srcPath,
distFile
},
ā¦
],
customTasks,
jsDir,
lintPaths,
allowEmpty
usePackageVersion,
stripDebug
},
logger: {
dir,
file
},
img: {
imgDir,
optimiseImages,
optimiseSVGs,
optimiseGIFs,
optimiseJPEGs,
optimisePNGs,
spriteSvgs,
svgSpriteFilename,
},
importedAssets: {
importedAssetsSrcGlob,
verbose
},
sw: {
isEnabled,
swDir,
outputFile,
staticFileGlobs,
dynamicFileRegex,
dynamicFileStrategy,
importScripts,
cacheId
},
copy: {
js,
css,
img,
fonts,
docs
},
docs: {
rootDir,
srcDir,
distDir,
assetDir,
templDir,
dataDir,
outputAssets,
remoteBase,
helpers,
excludeTemplateDirs
},
fonts: {
fontsDir
},
browserSync: {
files,
proxy,
reloadDebounce
},
misc: {
showFileSize,
showFiles
},
gulp: {
changeEvent,
onError
},
isProduction,
isDev
}
webRootDirType: string
Default: '.'
The root directory of your website.
assetSrcDirType: string
Default: 'src'
Root source directory for your assets.
assetDistDirType: string
Default: 'dist'
Root dist directory for your assets.
applyRevisionType: boolean
Default: true
Will add a content hash to the JS and CSS filenames, generating a new filename if any of the file's contents have changed. This can be utilised to force the clients to get the latest version of an updated asset.
packageVersionType: String
Returns the current package version.
cssscssDirType: string
Default: 'scss'
The directory where your SCSS files reside.
cssDirType: string
Default: 'css'
The bundled CSS file will be output to this directory.
lintPathsType: array
Default: ['']
Allows additional paths to be included or excluded from the linting task.
By default, the task will lint all .scss files within the scssDir directory.
sourcemapsType: boolean
Default: isDev
Turns sourcemaps on or off.
usePackageVersionType: boolean
Default: false
When set to true this will bundle a versioned css file e.g 'filename-[version].css'.
jsfilesType: Object
Default:
{
main: {
srcPath: 'index.js',
distFile: 'script.js'
}
}
An Object, that takes one or more child objects each describing a JavaScript bundle entry point and destination. Each of these objects can have the following properties:
srcPathType: string
Default: 'index.js'
The file path to a bundle entry point in your JavaScript.
distFileType: string
Default: 'script.js'
The filename for the JavaScript bundle once compiled.
customTasksType: array<string>
Default: []
Array of strings, containing the names of the custom tasks to be run as part of the gulp:scripts command, in parallel with scripts:bundle.
These should be defined by (or made available within) the consuming application, e.g., compiling third-party libraries within a scripts:libs task.
Gulp 4 does not easily allow for the entire default gulp:scripts implementation to be overridden, so any extra JS-related tasks that you need to run should be passed in here.
jsDirType: string
Default: 'js'
Name of the directory where all of your JavaScript files are kept.
Compiled JavaScript files will be placed inside a directory with the same name.
lintPathsType: array
Default: ['']
Allows additional paths to be included or excluded from the JS linting task.
By default, the task will lint all files within the jsDir directory.
allowEmptyType: boolean
Default: true
When set to true, it will allow the globbing patterns not to return any files without failing. If set to false, no files will result in an exception.
usePackageVersionType: boolean
Default: false
When set to true this will bundle a versioned JS file e.g 'filename-[version].js'.
stripDebugType: boolean
Default: true
This can also be controlled using the --noStripDebug flag. When this flag is added, console.log() statements will not be removed for production builds.
gulp scripts:bundle --prod --noStripDebug
This would generate the JS files as part of a production build, but would still include console.log() statements. Intended for QA releases.
gulp scripts:bundle --prod
This is a normal production build and would not include console.log() statements.
gulp scripts:bundle --noStripDebug
For non-production builds, the flag has no effect: you will still get debug statements even if include the flag.
loggerdirType: string
Default: 'js/shared'
Name of the directory where your js error logger file will live.
fileType: string
Default: 'js-error.js'
Name of the error logger file.
imgimgDirType: string
Default: 'img'
Name of the directory where your image files are kept.
Processed image files will be placed inside a directory with the same name.
optimiseImagesType: boolean
Default: 'true'
Controls whether or not all image typesare optimised as part of the image tasks.
optimiseSVGsType: boolean
Default: 'true'
Controls whether or not SVGs are optimised as part of the image tasks.
optimiseGIFsType: boolean
Default: 'true'
Controls whether or not GIFs are optimised as part of the image tasks.
optimiseJPEGsType: boolean
Default: 'true'
Controls whether or not JPEGs are optimised as part of the image tasks.
optimisePNGsType: boolean
Default: 'true'
Controls whether or not PNGs are optimised as part of the image tasks.
spriteSvgsType: boolean
Default: 'true'
Controls whether or not SVGs are turned into an SVG Sprite as part of the image tasks
svgSpriteFilenameType: string
Default: 'sprite.svg'
Filename of the SVG sprite which is generated from any SVG assets found in the image directory.
importedAssetsimportedAssetsSrcGlobType: string
Default: 'node_modules/@justeat/*/'
Glob of packages containing assets to be copied to assetDistDir.
verboseType: boolean
Default: 'true'
Whether to log the names of all assets being copied. Passed on to f-copy-assets.
swisEnabledType: boolean
Default: false
Determines whether the service worker is generated or not.
swDirType: string
Default: 'sw'
Name of the directory where your service worker's custom internal scripts are kept in.
Scripts here will be placed inside a directory with the same name.
outputFileType: string
Default: 'service-worker.js'
The name of the generated service worker file, to be placed in the root of your application.
staticFileGlobsType: array
Default: []
The static files in your application to be cached by the service worker.
dynamicFileRegexType: array
Default: []
An array of regex to match the dynamic content or API calls to cache e.g. [/^https:\/\/example\.com\/api/, /^https:\/\/fonts.googleapis.com\/css/].
dynamicFileStrategyType: string
Default: cacheFirst
The cache strategy to be used for content matched by dynamicFileRegex - these correspond to the sw-toolbox handlers.
importScriptsType: array
Default: []
Any additional internal scripts to include, aside from those in swDir.
cacheIdType: string
Default: ''
An optional string used to differentiate caches on the same origin during local development.
copyjs, css img, fonts & docsType: Object
Default: {}
copy.js, copy.css, copy.img, copy.fonts and copy.docs each take an object list of assets in the format:
copy:
js: {
prism: {
path: '/libs/**/*',
dest: '/libs',
revision: false
}
}
}
In which:
path is a string specifying the path within the relevant asset src folder of the asset to be copied.dest is a string specifying that destination folder for the asset to be copied to, within the relevant asset dist folder.revision is a boolean such that if it is true, the asset will be revision hashed when copied to its destination.path and dest must always be defined for each asset you wish to copy (except for copy:docs which uses the root docsDist path for the dest).
The object key (which in the above example is prism) of each asset is simply for your own use to identify each asset in your config.
copy:assetsCopies assets from packages to the dist directory.
docsrootDirType: string
Default: './docs'
Root directory where your documentation files reside.
By default your source files will be searched for in docs/src, and the generated content will be output to docs/dist.
srcDirType: string
Default: 'src'
The source directory for your documentation template files.
By default the documentation task will use the path docs/src ā with the src part of this path controlled by this config variable.
distDirType: string
Default: 'dist'
The directory your documentation will be compiled to.
By default the documentation task will use docs/dist ā with the dist part of this path controlled by this config variable.
assetDirType: string
Default: 'assets/'
The directory your generated assets will be placed inside the documentation directory.
By default the documentation task will use docs/dist/assets/ ā with the assets/ part of this path controlled by this config variable.
templDirType: string
Default: 'templates'
The name of the directory where your documentation template files are kept.
dataDirType: string
Default: 'data'
The name of the directory where your documentation data files are kept.
outputAssetsType: boolean
Default: false
Indicates whether or not the JavaScript, CSS and image files should be placed into the docs/dist/assets/ directory.
remoteBaseType: string
Default: ''
Applies a base path to asset URLs when publishing documentation to Github pages. By default this is set to be an empty string.
helpersType: object
Default: {}
Can pass in an object set of functions, which will be exposed in handlebars as helper functions in the documentation tasks when called using their object key.
For example:
{
'toLowercase': input => input.toLowerCase()
}
Will expose the helper toLowercase so that using {{toLowercase name}} within a handlebars template will convert the handlebars string name to lowercase.
excludeTemplateDirsType: array
Default: ['resources']
Directory names which should be ignored when adding any shared templates to the documentation. By default the array contains known directory names which should be ignored.
fontsfontsDirType: string
Default: 'fonts'
Name of the directory where your font files are kept.
browserSyncfilesType: array
Default: []
List of paths to watch for changes. Accepts globs.
proxyType: string
Default: ''
URL of local website instance.
reloadDebounceType: number
Default: 1000
Wait for a specified window of event-silence (in milliseconds) before sending any reload events.
miscshowFileSizeType: boolean
Default: true
Should file sizes be displayed when a task is run?
showFilesType: boolean
Default: true
Should file names be displayed when a task is run?
gulpchangeEventType: function
Event which fires when a file is modified.
onErrorType: function
Event which fires when an error occurs.
The following options are also present in the config but cannot be overridden.
isProductionType: boolean
Set to true when the --prod flag is passed.
isDevType: boolean
Set to the opposite value of isProduction.
lintModulesType: boolean
When set to true, by setting the --lintModules flag when running the build, the build will also lint SCSS files within sub-dependencies. This is intended to help with local development when using dependency linking.
You can access the pathBuilder paths like this.
const { pathBuilder } = require('@justeat/gulp-build-fozzie');
gulp.task('scss', () => gulp.src(`${pathBuilder.scssSrcDir}/**`)
ā¦
These are the paths which the pathBuilder object provides.
scssSrcDirDefault: 'src/scss'
cssDistDirDefault: 'dist/css'
jsSrcDirDefault: 'src/js'
jsDistDirDefault: 'dist/js'
imgSrcDirDefault: 'src/img'
imgDistDirDefault: 'dist/img'
importedAssetsDistDirDefault: 'dist/imported-assets'
swOutputPathDefault: '.'
swSrcDirDefault: 'src/sw'
swDistDirDefault: 'dist/sw'
docsSrcDirDefault: './docs/src'
docsDistDirDefault: './docs/dist'
docsTemplateDirDefault: './docs/src/templates'
docsDataDirDefault: './docs/src/data'
docsAssetsDistDirDefault: './docs/dist/assets/'
docsCssDistDirDefault: './docs/dist/assets/css'
docsJsDistDirDefault: './docs/dist/assets/js'
docsImgDistDirDefault: './docs/dist/assets/img'
fontsSrcDirDefault: 'src/fonts'
fontsDistDirDefault: 'dist/fonts'
To run the unit tests for the project run the yarn test script. To see the test coverage run the test:cover script.
FAQs
Gulp build tasks for use across Fozzie modules
We found that @justeat/gulp-build-fozzie demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.Ā It has 21 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.

Product
Bringing supply chain security to the next generation of JavaScript package managers

Product
A safer, faster way to eliminate vulnerabilities without updating dependencies