Front-end development stack used at Actum to create beautiful things.
- Features
- Getting started
- Project structure
- Naming conventions
- Workflow
- Debugging with Visual Studio Code Debugger for Chrome
- Troubleshooting
🛠| Preprocessing | Linting | Postprocessing |
---|---|---|---|
CSS | SASS | Stylelint | PostCSS (autoprefixer, cssnano) Sourcemaps |
JavaScript | Babel | ESLint | Browserify Watchify Uglify Sourcemaps |
SVG | SVGStore svgmin |
||
Images | imagemin | ||
Favicons | gulp-real-favicon | ||
HTML | Nunjucks | Prettify | |
Dev server | browser-sync | ||
API mocking | json-server |
- Icons:
- SVGStore combines SVG files into one with
<symbol>
elements
- SVGStore combines SVG files into one with
- Development mode:
- File Watching and Live Reloading with BrowserSync
- Autogenerated index of HTML templates
- Production mode
- JS and CSS are uglified and minified
- Local production server for testing
- Deployment
todo
npm install -g gulp
-
Clone the repository:
git clone https://github.com/actum/gulp-dev-stack ./PROJECT_NAME
-
Install package dependencies with
npm install
under the root of yourPROJECT_NAME
folder. -
Configure the project. Do not forget to change the respective keys in
package.json
according to your project’s info, and setup a unique listening port in./gulp/config.js
.
Following a certain file and folder structure keeps development, maintenance and debugging processes much easier when switching from project to project based on the same development stack.
-
Build (production) folder generated and changed automatically by various Gulp tasks. Contains production-ready compiled CSS (
dist/css
), JavaScript (dist/js
), graphics (dist/gfx
) and HTML. Should not be edited manually. -
-
tasks/ The list of Gulp tasks. Each task is responsible for handling automation for different file types (i.e.
styles.js
compiles SCSS to CSS, andserve.js
launches a local server for development). Do not edit unless you know what you are doing. -
config.js Global Gulp configuration, consisting of declaring environment and folder/file paths. While we would not recommend to change the project structure references, you may and should customize such keys as
PORT
orTITLE
, which are unique for each project. -
environment.js Determines current working environment (
DEVELOPMENT
orPRODUCTION
).
-
-
Development folder. This is where all the action happens.
- api/
- api.js Entry point of dummy data for api server.
- app/ JavaScript source files.
- components/ React-driven components.
- modules/ Vanilla JS classes.
- store/ Redux store.
- utilities/ Small helpers for everyday routine.
- app.js Entry point for JS bundling.
- factory.js Functions for initializing one instance of module on multiple containers.
- init.js Functions for initializing one instance of module per one container.
- render.js Functions for initilizing React components.
- gfx/
- svg/
- sprites/ Folder for SVG sprites, where each nested folder represents a sprite name, and containing files - the icons bundled into that sprite.
- example.svg Single SVG icons, optimized and outputted individually for direct usage.
- image.png
- svg/
- styles/
- base/ Base components used by Styleguide.
- bootstrap/ Bootstrap overrides.
- components/ Custom components.
- critical.scss Critical CSS
- main.scss Entry point for SCSS compiling.
- variables.scss Custom variables
- tpl/
- components/
- helpers/
- layouts/
- PAGE.nunj
Template page written in Nunjucks and compiled to
dist/PAGE.html
.
- api/
-
A brief summary of dev stack root files purpose.
-
Babel configuration. Primarily used to specify presets for plugins for JavaScript compiling.
-
A definition of coding styles for different code editors and IDEs. You can specify what configuration (indent size, charset, trim whitespaces, ...) should be used for what files.
-
Eslint configuration. Primarily used to specify and configure rules of JavaScript linting.
-
Path-specific settings used by Git. Settings that Git applies to certain subdirectories or subsets of files - for example EOL (End Of Line) setting.
-
Contains patterns that are matched against file names in your Git repository to determine whether or not they should be ignored (commited).
-
Stylelint configuration. Primarily used to specify and configure rules of CSS (SCSS) linting.
-
CircleCI configuration. How to set up and test your project.
-
Project workflow guideline. How to create branches, write commits or assign pull requests.
-
Gulp configuration and definition of automation tasks.
-
Open source license of Git repository. It enables others to freely use, change and distribute the project in the repository.
-
NPM manifest. Automatically generated with change of
node_modules
orpackage.json
if working with NPM. Holds information about which versions of each dependency were installed in order to get consistent installs across machines. -
NPM packages specifics. It lists the packages (with their versions) your project depends on.
-
It's me!
-
Yarn manifest. Automatically generated with change of
node_modules
orpackage.json
if working with Yarn. Holds information about which versions of each dependency were installed in order to get consistent installs across machines.
​
-
To start your development process, run gulp --dev
in the terminal. This will prepare the project for the work and launch watch tasks to update the files on-the-fly as you work. A --dev
flag will notify the automatization tasks to add or omit certain steps (i.e. your JavaScript files are not minified while in development mode).
If you want to start also an API server, run gulp --dev --api
. This server will run on different port which is defined in gulp/config.js
as API_PORT
.
If you want to start Mokker, run gulp server
. This server will run on different port which is defined in gulp/config.js
as MOCK_PORT
.
If you want to revert back to a fresh state without built files, run
gulp clean
It will remove the dist/
folder and all built targets in src/
.
To prepare production-ready files, run gulp
and grab built assets from dist
folder.
- create branch in your project’s repo (eg.
devstack-update
) - add devstack as a remote to your project (
git remote add devstack [email protected]:actum/gulp-dev-stack.git
) - fetch remote (
git fetch devstack
) - merge branch from devstack remote to
devstack-update
(use--allow-unrelated-histories
if necessary) - merge your project’s
master
todevstack-update
- solve eventual conflicts
- push the
devstack-update
branch - create PR from
devstack-update
to yourmaster
Support for extension Debugger for Chrome is enabled! Big thanks to roblourens
- Install extension Debugger for Chrome
- Run project in development mode
- Run Debugger for Chrome by F5 key (in Windows)
Common errors | |
---|---|
Error: "Local gulp not found in ..." when running gulp . |
|
Solution: Make sure you run npm install after cloning the repository. |
When you have encountered a bug, or have a useful suggestion how to improve this development stack, do not hesitate to Create a new issue.