npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gbs

v1.0.9

Published

Build system based on Gulp, for isomorphic applications

Downloads

544

Readme

GBS (Gulp Build System)

What is GBS ?

Build system based on Gulp and Browserify, for isomorphic applications. GBS created as simple module for my projects. In current version, it support:

  • Transpile ES6, ES7, JSX to ES5
  • Transpile less to css
  • Create client bundles
  • Uglify client bundles
  • Find node_modules and create logs of requires, to analyze dependencies
  • Move all required node_modules in separate bundle
  • Detect eslint errors configured in .eslintrc

What NOT SUPPORT in current time, but can be included later: real time file watch.

Why not just use Webpack ?

Webpack is great! It almost ideal build system for client bundles, but when You want work with some more complicated things like isomorphic applications... Webpack has to many configs Gulp instead allow you to write pure JavaScript code, without learn hundreds configs. And couple more advantages:

  • Isomorphic - Include in bundle only client files, separate them by local package.json, and don't create server bundle, leaving project directories structure untouched. It helpful for debug and build optimizations.
  • Optimization - Transpile only changed files; Eslint check only changed files or files with errors in previous check; Separate node_modules in different bundle, wich updated only after npm install; Support build maty client bundles with diffrent entrys and common lib bundle...
  • Speed - Thanks to optimizations, build change only necessary part of application, reducing the necessary time.
  • Single useful Gulp functions - You can import just couple functions from GBS and use them in Your Gulp tasks.

How to use GBS ?

A detailed example of usage GBS you can see in gbs-example-project

Install

$ npm install --save-dev gulp gbs

Create gulpfile.js and add tasks to package.json

In root diectory of application create gulpfile.js or copy and rename exampleGulpfile.js from GBS

"scripts": {
    "buildLib": "gulp buildLib",
    "start": "gulp",
    "run": "node lib/server",
    "buildAndRun": "gulp buildLibAndBundles && node lib/server",
    "poststart": "node lib/server",
    "postinstall": "gulp buildLib"
  },

Run tasks

$ npm run buildLibAndStart

GBS Documentation

Init configs

|Config key|Type|Default|Description|Example| |:-|:-|-:|:-|:-| |srcDir|string| |Directory which contains JS files with ES6, ES7, JSX|'src'| |libDir|string||In this directory will placed transpiled in to ES5 JS files|'lib'| |entryPointsFiles|string||By using this pattern GBS will be looking files which are entry points for client bundles|'/lib//client.js'| |bundlesDir|string||In this directory will be created client bundles|'lib/static/js'| |libsBundleFileName|string|'libs.js'|File name for client bundle with node_modules|'libs.js'| |lessEntryPointsFiles|string||By using this pattern GBS will be looking files which are entry points for css files|'/src/static/css/.less'| |cssDir|string||In this directory will placed compiled css files|'lib/static/css'| |logDir|string||In this directory will be created log files|'logs/build'| |uglifyBundles|boolean, string, array of strings|false|Set names of client bundles which need uglify|['public.js']| |uglifyLibBundle|boolean|false|Need uglify client libs bundle?|true| |modulesShim|object|{}|Configure modules which will be included as separate JavaScript files in HTML. Such as: jQuery, React... More details in browserify-global-shim|{'react': 'React'}| |modulesDontMoveToLibBundle|array of strings|[]|List of node_modules names which will be leave in client bundles and don't included to libs bundle.|['lodash']| |delOldFoldersIgnoreRegExp|RegExp| regexp for 'static' dir |Regular expression which shows what files and dirs need to leave in libDir, even they are missing in srcDir|| |modulesFileName|string|'modules.json'|Name for log file which contains list of all required node_modules on client side|| |modulesRequiredInfoFileName|string|'modulesRequiredBy.json'|Name for log file which contains detailed information about what client files in srcDir require node_modules|| |eslintDetectErrorsFileName|string|'eslintDetectErrorsLog.json'|Name for log file which will contain eslint errors ||

Gulp Tasks available after init

|Task name|Description| |:-|:-| |buildSrc|Transpile JavaScript files with ES6, ES7, JSX syntax from srcDir and put them in lidDir as ES5| |buildCss|Transpile less files from lessEntryPointsFiles and put them in cssDir as css| |eslintDetectErrors|Find eslint errors in srcDir, fix uncritical warnings and create eslintDetectErrorsFileName log file in logDir| |findUsedModules|Find required node_modules in files entryPointsFiles and create 2 log file in logDir| |buildLib|Run buildSrc, findUsedModules then create bundle with needed on client node_modules libsBundleFileName in bundlesDir. Bundle can be uglify if set uglifyLibBundle| |prepare|Delete all files and dirs from libDir if they don't exist in srcDir. Run eslintDetectErrors, buildSrc, buildCss| |build|Run prepare and create client bundles using entry points which match entryPointsFiles and put them in bundlesDir. To uglify them, set bundles names in uglifyBundles. If You want create only some of bundles, add process arguments with their names: gulp createBundles -- --name1 --name2| |buildLibAndBundles|Run buildLib, build|

Single functions for Gulp

Example of usage:

'use strict';
const gulpFunctions = require('gbs');
gulp.task('buildSrc', gulpFunctions.buildSrc(
    'someDir/dirWithSrcFiles',
    'someDir/dirForLibFiles'
));
buildSrc (srcDir, libDir)

Transpile JavaScript files with ES6, ES7, JSX syntax from srcDir and put them in lidDir as ES5

buildCss (lessEntryPointsFiles, cssDir)

Transpile less files from lessEntryPointsFiles and put them in cssDir as css

delOldFolders (srcDir, libDir, delOldFoldersIgnoreRegExp)

Delete all files and dirs from libDir if they don't exist in srcDir. To prevent deleting some of them, use delOldFoldersIgnoreRegExp

createBundles (entryPointsFiles, bundlesDir, modulesFilePath)

modulesFilePath: logDir + modulesFileName Create client bundles using entry points which match entryPointsFiles and put them in bundlesDir. If You want create only some of bundles, add process arguments with their names: gulp createBundles -- --name1 --name2

eslintDetectErrors (srcDir, libDir, eslintDetectErrorsFilePath)

eslintDetectErrorsFilePath: logDir + eslintDetectErrorsFileName Find eslint errors in srcDir, fix uncritical warnings and create eslintDetectErrorsFileName log file in logDir

createLibBundle (bundlesDir, libsBundleFileName, modulesFilePath, modulesShim)

libsBundleFileName: bundlesDir + libsBundleFileName modulesFilePath: logDir + modulesFileName Create bundle libsBundleFileName in bundlesDir with needed on client node_modules set in file modulesFilePath. And create modulesShim for outside libraries.

uglifyBundles (bundlesDir, uglifyBundles, ignoreBundles)

Uglify bundles in bundlesDir with names set in uglifyBundles array and ignore names from ignoreBundles. Set uglifyBundles as true to uglify all files.

findUsedModules (entryPointsFiles, logDir, modulesFileName, modulesRequiredInfoFileName, modulesDontMoveToLibBundle)

Find required node_modules in files entryPointsFiles and create 2 log file in logDir with names modulesFileName, modulesRequiredInfoFileName. You can set names of node_modules wich will be leave in client bundles and don't included to libs bundle, set modulesDontMoveToLibBundle array.