Link Search Menu Expand Document

Feature Folders

With the features array generated from end user’s answers, we can use them to conditionally construct final project.

Let’s have a look of makesjs/demo2 folder structure again.

─ questions.js
─ common/
  ├── LICENSE__if_license
  └── REAME.md
─ nodejs/
  ├── .babelrc__if_babel
  ├── .gitignore
  ├── index.js__if_not_babel_and_not_typescript
  ├── package.json
  └── src/
      ├── index.js__if_babel
      └── index.ts__if_typescript
─ ruby/
  └── main.rb

The common/ folder is always in play no matter what features end users selected, and it’s always the first folder processed.

You can define additional feature folders with name matching selected features, they serve as the first level of condition for grouping files/folders.

Note makes-demo2 defined feature folders nodejs and ruby, but didn’t define all folders for every possible features (babel, typescript, …).

You don’t have to define a feature folder for every feature. There are additional way to conditionally include a file/folder, which we will elaborate in conditional file and folder.

File objects stream

Internally, when end user selected features ['nodejs', 'babel'], “makes” processes them in a file objects stream. Roughly like following gulp stream:

gulp.src(['skeleton/common/**/*', 'skeleton/nodejs/**/*', 'skeleton/babel/**/*'])
  // ... additional processing for conditional file/folder, preprocessing ...
  .pipe(gulp.dest(project_folder));

That’s how “makes” merges all common+features folders together to generate final project.

That’s how simple “makes” works, similar to gulp, every file is processed as a vinyl file. This simple work flow provided enough flexibility, we will explore more in other topics.

Other top level folder

You can create other top level folder freely as long as the folder name is different from any features.

For example, you can create a test/ folder to contain spec files for your questions.js and other optional JavaScript files we will introduce in other topics.