2.1.9 • Published 4 years ago

generator-ky v2.1.9

Weekly downloads
5
License
MIT
Repository
github
Last release
4 years ago

generator-ky NPM version Build Status Coverage percentage

A powerful generator for creating static page base on yeogurt.

Overview

generator-ky is an opinionated generator for web development. Tools for building a great experience across many devices. A solid starting point for both professionals and newcomers to the industry.

Features

Available
Browsersync
Pug
Sass
GulpV4
Browserify
Webpack
Optimize Images
Minify Css and Javascript
Unit test
Components
SEO

Available Options

Browser

At present, I officially aim to support the last two versions of the following browsers:

  • Chrome
  • Edge
  • Firefox
  • Safari
  • Internet Explorer

This is not to say that generator-ky cannot be used in browsers older than those reflected, but merely that my focus will be on ensuring our layouts work great in the above.

Prerequisites

NOTE: For OSX users You may have some issues compiling code during installation of packages. Please install Xcode from App Store first. After Xcode is installed, open Xcode and go to Preferences -> Download -> Command Line Tools -> Install to install command line tools.

NOTE: For Windows users You may have some issues compiling BrowserSync during installation of packages. Please go to http://www.browsersync.io/docs/#windows-users for more information on how to get all the needed dependencies.

Node.js

Bring up a terminal and type node --version. Node should respond with a version at or above 10.x.x. If you need to install Node, go to nodejs.org and click on the big green Install button.

Gulp

Bring up a terminal and type gulp --version. If Gulp is installed it should return a version number at or above 4.x.x. If you need to install/upgrade Gulp, open up a terminal and type in the following:

$ npm install --global gulp
$ npm install --global gulp-cli

This will install Gulp globally. Depending on your user account, you may need to configure your system to install packages globally without administrative privileges.

Yeoman

Once you have Node installed, make sure you have these tools by opening up a terminal/command prompt and entering following commands:

CommandResponse
yo --versionat or above v1.8.0

If you get any errors and/or you're version(s) are too low, you should run npm install -g yo. This will install both tools and update them to their latest versions.

Ky

Now that you have all the needed dependencies, you can install this generator with the following command:

npm install -g generator-ky

That completes installation! So at this point you should have all the needed tools to start working Ky.

Setup

When starting a new project, you will want to: open up a terminal/command prompt, make a new directory, and navigate into it.

mkdir my-new-project && cd $_

then, run the Ky generator.

yo ky

Optionally, you can skip the automated installation of npm packages by passing in --skip-install. The main reason to use this is if you have spotty/no internet connection, but would still like to generate your project.

yo ky --skip-install

Follow all the prompts and choose what suits you most for the project you would like to create. When you finish with all of the prompts, your project scaffold will be created and all dependencies will be installed.

NOTE: If you used the --skip-install option, no dependencies will have been installed and your gulp tasks will NOT work. You will need to run npm install in your project's root directory in order to get started running automated tasks

Once everything is installed, you will see a project structure like below:

|-- gulp
|   |-- helpers                             # Helpers function for task runner
|   |-- tasks                               #Folder for gulp tasks
|   |-- utils.js                            # Build related logic/code
|-- src
|   |-- app
|   |   |-- data                            # JSON/YAML files that add data to templates
|   |   |-- pages
|   |   |   |-- components                  # Components
|   |   |   |   |-- index.js                # Folder to export component's logic
|   |   |   |   |-- index.sass              # Folder to import component's style
|   |   |   |-- layouts
|   |   |   |   |-- _includes               # css, scripts, SEO, watermark, variables for template
|   |   |   |   |-- _mixins                 # Mixins for template (Bem,...)
|   |   |   |   |-- layout.pug              # Page layout
|   |   |   |-- views
|   |   |   |   |-- home                    # Page view
|   |   |   |   |-- index.js                # Folder to export View's logic
|   |   |   |   |-- index.sass              # Folder to import View's style
|   |   |   |-- index.js                    # Components's logic and Pages's logic in folder pages will be import here
|   |   |   |-- index.sass                  # Import views's sass and components's sass
|   |   |-- shared                          # Component that available on all pages will be created here
|   |   |   |-- components
|   |   |   |   |-- index.js
|   |   |   |   |-- index.sass
|   |   |   |-- helpers
|   |   |   |-- index.js
|   |   |   |-- index.sass
|   |   |-- styles                          # Global styles
|   |   |   |-- abstracts
|   |   |   |   |-- functions               # Helper function for mixins
|   |   |   |   |-- mixins                  # Mixins
|   |   |   |   |-- mixins.sass             # Import all mixins file
|   |   |   |-- base                        # Global file (breakpoint, global, typography, variables)
|   |   |   |-- index.sass                  # Import base and mixins
|   |   |-- main.js                         # Main bootstrap file
|   |   |-- main.sass                       # Main stylesheet (import everything to this file)
|   |-- assets
|       |-- css                             # Custom css library
|       |-- fonts                           # Fonts
|       |-- img                             # Image
|       |-- js                              # Custom javascript library
|-- config.json                             # Config directories, entries, ...
|-- gulpfile.babel.js                       # Gulp task configuration
|-- plugins.json                            # All css and javascript library will concat here
|-- seo.json                                # SEO folder

Now you can run the following npm scripts:

Build and optimize the current project, ready for deployment. This includes linting as well as image, script, stylesheet and HTML optimization and minification. Also, a browsersync script will be automatically generated, which will take care of precaching your sites' resources.

$ npm start

Serve the Fully Built & Optimized Site. npm run build task creates the build/ folder in the root of the project with build files only. It will help you to create clear instances of code for the production or further implementation.

npm run build

npm run serve:prod

Configuration

In the config.json file, within the root of the generated project, you have the ability to configure some project settings:

Site

SettingDescription
hostHost URL of the development server (browserSync)
portPort of the development server (browserSync)
baseUrlRoot directory of your site

Main Directories

SettingDescription
sourceSource folder for all development files (default location for page subgenerator)
destinationBuild folder where production version of site is generated
temporaryTemporary folder where development server files are generated

Source Directories

Folders relative to the source and app configured directory

SettingDescription
dataData folder where JSON files are loaded into templates
stylesStyles folder where all stylesheet files are located (main stylesheet must be in root of this folder)
pagesPages folder where all reusable code should live (default location for pages subgenerator)
componentComponets folder where all reusable code should live (default location for components subgenerator)
assetsWhere all img, fonts, custom css library, custom javascript library files should live

Entry files

Files that should be searched for and created by build tasks. File strings and Globs can be used to process desired file(s). Ex: main**.js will process all files that start with main and end with .js

SettingDescription
scriptTells browserify/webpack what file(s) to bundle and generate at your desired build target
cssTells your stylesheet preprocessor (Sass) what file(s) to generate at your desired build target

Default configuration:

{
	"port": 9000,
	"baseUrl": "./",
	"entries": {
		"script": "main.js",
		"css": "main.+(sass|scss)",
		"dataJson": "data.json"
	},
	"directories": {
		"source": "src/",
		"app": "app/",
		"destination": "build",
		"temporary": "tmp",
		"component": "components/",
		"css": "styles/",
		"assets": "assets/",
		"scripts": "scripts/",
		"views": "views/",
		"images": "img/",
		"fonts": "fonts/",
		"data": "data/",
		"pages": "pages/",
		"shared": "shared/"
	},
	"author": {
		"name": "yem",
		"version": "v1.0.0",
		"link": "",
		"lincense": "MIT",
		"coding": "Coding by yem",
		"phone": "XXXXXXXXXX",
		"email": "yem@email.com"
	}
}

Gulp tasks

TaskDeciption
Easy startAll setting of gulp task is in config.json
authorThis task will inject the config.author to css and javascript in production mode.
browserifyCompile the main.js. It can only view files imported.
browserSyncBrowsersync can watch your files as you work. Changes you make will eith
cleanproduction or development folder removing
concatUsing gulp-concat to concat all library's css and javascript file to one single css and javascript file
doneNotify that the production has been done. Will show on the log screen
eslintNeed to lint js files.
fontsCopy fonts.
imagesCopy images to development or production folder.
pugCompile pug
revStatic asset revisioning by appending content hash to filenames unicorn.css → unicorn-d41d8cd98f.css
sassCompile sass file
sitemapMake sitemap on production mode
sizeLog file's size of the production folder
spriteConvert a set of images into a spritesheet and CSS variable
sizeZip the production folder

npm Workflow

npm run build

Runs npm run test and builds out an optimized site through compilation of preprocessors (Pug, Sass, etc), minification of CSS and HTML, uglification of Javascript, and optimization of images.

npm start

Starts up a development server that watches files and automatically reloads them to the browser when a change is detected.

Extra Task Target(s)

TasksDescription
npm run serve:prodstarts up a server that loads a production version of the site
npm run startstarts up a server and opens it within your default browser

npm test

Runs ESLint and Karma to lint and run JavaScript tests, respectively.

Extra Task Target(s)

TasksDescription
npm run test -- --watchruns npm run test, but also watches test files and auto runs tests when changes are detected.

NOTE: test:watch is only available if you chose to unit test your javascript

Adding the --debug option to any npm script displays extra debugging information (ex. data being loaded into your templates)

Sub-Generators

Note: Generators need to be run from the root directory of your app.

Default Generators

Page

Creates a new page.

Example:

$ yo ky:page contact

Produces:

src/app/pages/views/contact/index.{pug}

With custom path

$ yo ky:page demo-page/about --custom

Produces:

src/app/demo-page/about/index.{pug}

Component

Creates a new component.

Example:

$ yo ky:component pages/components/header

Produces:

src/app/pages/components/header/header.{pug}
src/app/pages/components/header/header.{scss,sass}
src/app/pages/components/header/header.js
src/app/pages/components/header/tests/header.test.js

Troubleshooting

If you find yourself running into issues during installation or running the tools, open an issue. I would be happy to discuss how they can be solved.

Author

👤 ngocsangyem

Show your support

Give a ⭐️ if this project helped you!

Thank you larsonjj - This project was base on generator-yeogurt.

2.1.9

4 years ago

2.1.8

4 years ago

2.1.7

4 years ago

2.1.6

4 years ago

2.1.5

4 years ago

2.1.4

4 years ago

2.1.3

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.0

4 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.0.0

4 years ago

0.0.0

4 years ago