An open API service indexing awesome lists of open source software.

https://github.com/scriptex/webpack-mpa-ts

Multiple page application setup with Webpack using SASS, PostCSS, TypeScript, etc
https://github.com/scriptex/webpack-mpa-ts

front-end-developer-tool front-end-starter-kit multi-page-application sass-boilerplate webpack-boilerplate webpack-configuration

Last synced: 7 months ago
JSON representation

Multiple page application setup with Webpack using SASS, PostCSS, TypeScript, etc

Awesome Lists containing this project

README

          


Webpack MPA Logo



Zero config and fast installation: Run `npx webpack-mpa && npm i && npm start` in your terminal.



[![Travis CI](https://travis-ci.com/scriptex/webpack-mpa-ts.svg?branch=master)](https://travis-ci.com/scriptex/webpack-mpa-ts)
[![Github Build](https://github.com/scriptex/webpack-mpa-ts/workflows/Build/badge.svg)](https://github.com/scriptex/webpack-mpa-ts/actions?query=workflow%3ABuild)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/34d3d75710534dc6a38c3584a1dcd068)](https://www.codacy.com/gh/scriptex/webpack-mpa-ts/dashboard?utm_source=github.com&utm_medium=referral&utm_content=scriptex/webpack-mpa-ts&utm_campaign=Badge_Grade)
[![Codebeat Badge](https://codebeat.co/badges/d765a4c8-2c0e-44f2-89c3-fa364fdc14e6)](https://codebeat.co/projects/github-com-scriptex-webpack-mpa-ts-master)
[![CodeFactor Badge](https://www.codefactor.io/repository/github/scriptex/webpack-mpa-ts/badge)](https://www.codefactor.io/repository/github/scriptex/webpack-mpa-ts)
[![DeepScan grade](https://deepscan.io/api/teams/3574/projects/5257/branches/40799/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=3574&pid=5257&bid=40799)
[![Analytics](https://ga-beacon-361907.ew.r.appspot.com/UA-83446952-1/github.com/scriptex/webpack-mpa-ts/README.md?pixel)](https://github.com/scriptex/webpack-mpa-ts/)

# Webpack-MPA-TS

> Opinionated multiple page application setup with Webpack using SASS, PostCSS, ES2017, TypeScript, PNG & SVG Sprites and more.

This boilerplate is suitable for static web applications, WordPress websites, etc.

## Visitor stats

![GitHub stars](https://img.shields.io/github/stars/scriptex/webpack-mpa-ts?style=social)
![GitHub forks](https://img.shields.io/github/forks/scriptex/webpack-mpa-ts?style=social)
![GitHub watchers](https://img.shields.io/github/watchers/scriptex/webpack-mpa-ts?style=social)
![GitHub followers](https://img.shields.io/github/followers/scriptex?style=social)

## Code stats

![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/scriptex/webpack-mpa-ts)
![GitHub repo size](https://img.shields.io/github/repo-size/scriptex/webpack-mpa-ts?style=plastic)
![GitHub language count](https://img.shields.io/github/languages/count/scriptex/webpack-mpa-ts?style=plastic)
![GitHub top language](https://img.shields.io/github/languages/top/scriptex/webpack-mpa-ts?style=plastic)
![GitHub last commit](https://img.shields.io/github/last-commit/scriptex/webpack-mpa-ts?style=plastic)

## Dependencies

In order to use this setup you need to have installed the following dependencies:

1. Node - min v8.9.4 - LTS recommended
2. NPM - min v5.6.0
or
3. Yarn - min v1.3.2
4. Bash terminal (Default on OSX/Linux, GitBash or similar on Windows)

## Default setup

The default setup uses PHP files, but you can easily switch to a file format of your choice.

Also, you can always switch to another file/folder structure if the current one does not suit you.

Just keep in mind that the styles should be located in `assets/styles` and the scripts should be located in `assets/scripts`.

## Zero config and fast installation

Navigate to your new project's folder and execute the following command:

```sh
npx webpack-mpa-ts && npm i && npm start
```

This will install Webpack-MPA in your project folder and you will be able to start right away.

## Download

You can download this setup [directly](https://github.com/scriptex/webpack-mpa-ts/archive/master.zip) and extract it.

or use NPM or Yarn to install it:

```sh
npm i webpack-mpa-ts
```

or

```sh
yarn add webpack-mpa-ts
```

Then navigate to the `webpack-mpa-ts` folder and proceed with the rest of the instructions.

## Global installation

It is possible to use the CLI tool included in Webpack MPA TS. In order to do this you must install Webpack MPA TS globally:

```sh
npm i webpack-mpa-ts -g
```

or

```sh
yarn global add webpack-mpa-ts
```

The `wmpats` binary is now available for you to use.

Go to your new project folder and execute

```sh
wmpats
```

Your new project is setup!

## Install dependencies

```sh
yarn
```

or

```sh
npm i
```

## Develop

```sh
yarn start
```

or

```sh
npm start
```

## Build

```sh
yarn build
```

or

```sh
npm run build
```

## Details

1. [SCSS](http://sass-lang.com/) stylesheets preprocessing

- SCSS entry point is `main.scss` file located in `assets/styles`
- The whole stylesheets file/folder structure is up to you
- [ITSCSS](https://github.com/scriptex/itscss) boilerplate used as a starting point.
- Glob import in SASS thanks to [node-sass-magic-importer](https://github.com/maoberlehner/node-sass-magic-importer)

2. [PostCSS](https://github.com/postcss/postcss) stylesheets postprocessing including:

- [easy importing](https://github.com/TrySound/postcss-easy-import) of non-sass files
- [url rebase](https://github.com/postcss/postcss-url) - locates and copies assets from `node_modules`
- [postcss-utilities](https://github.com/ismamz/postcss-utilities) - allows usage of utility mixins such as `clearfix`
- [flexbox bugs](https://github.com/luisrudge/postcss-flexbugs-fixes) - fixes common flexbox issues on Internet Explorer
- [css minification](http://cssnano.co/) - minifies the bundles stylesheet
- [automatic vendor prefixes](https://github.com/postcss/autoprefixer)

> "Write your CSS rules without vendor prefixes (in fact, forget about them entirely)"

3. PNG Sprite generating using [Webpack SpriteSmith](https://github.com/mixtur/webpack-spritesmith)
The default setup includes retina sprite support which means that you should provide a retina version of each png icon.

If you do not wish to use the retina sprite, comment the `@include retina-sprites($retina-groups);` statement in `main.scss` file.

In order to use the PNG sprite, you need to do so by adding the relevant icons in your markup:

```html

```

The class name corresponds to the name of the PNG file.

4. Latest Typescript support

- Minification of the bundled file
- Source maps

5. Automatic browser reload using [BrowserSync](https://browsersync.io/)

- The setup assumes that you have a web server (MAMP, XAMPP, etc) installed.
- If you wish to use a proxy in browsersync you can do it using the `url` CLI argument like this:

```sh
yarn start --env url=http://your.app
```

or

```sh
npm start --env url=http://your.app
```

If you do not have a web server installed, then the files can be served via the browser-sync built-in server. In order to use this you need to pass a new CLI argument `server` like this.

```sh
yarn start --env server
```

or

```sh
npm start --env server
```

6. SVG Sprite generating using [spritesh](https://www.npmjs.com/package/spritesh)

All svg files located in `assets/images/svg` are merged into a single `sprite.svg` file in `dist` directory.

This action is performed each time the `start` command is invoked.

In order to use the SVG sprite you first need to include it in your markup. You can do so in several ways:

- If you're using PHP files, include it in each of your PHP files: ``
- If you're using HTML files, paste the content of the SVG sprite in each of your HTML files.
- If you're using another templating method (posthtml include, handlebars, ejs, etc) you need to do so according to its documentation.

It is preferred to include the SVG sprite right after your opening `` tag

In order to add an SVG icon in your markup, you can do so by using the SVG `` tag:

```html



```

7. All front-end assets are stored in an auto-generated `dist` folder.

## Assets

The `assets` folder contains several folders:

- `images` - contains several folders too:
- `favicon` - contains [all icons variations](https://github.com/audreyr/favicon-cheat-sheet)
- `sprite` - contains png sprite's parts
- `svg` - contains svg sprite's parts
- `temp` - contains content images
- `scripts` - contains the JS modules
- `styles` - contains the SASS stylesheets

**Each `start` command regenerates the contents of the `dist` folder.**

## Supported Browsers

This setup uses [Browserslist](https://github.com/browserslist/browserslist) to target browsers.

The default list of supported browsers is listed in the `package.json` file:

```json
{
"browserslist": ["> 1%", "last 2 versions"]
}
```

This means that supported browsers vary based on current usage data and current browser versions.

In general, this setup supports the two most recent versions of all browsers.

## Scripts

There are several scripts defined in the `package.json` file:

```json
{
"build": "webpack --mode=production",
"start": "webpack --watch --mode=development",
"html": "php index.php > index.html",
"critical": "critical index.html > assets/dist/critical.css",
"rm-html": "rm index.html",
"pwa": "create-pwa --icon=\"./assets/images/favicon/icon.png\"",
"prod": "yarn build && yarn html && yarn critical && yarn rm-html"
}
```

Here is a bit more about what each script does:

1. `build`: Builds the production version of the javascript and css bundles, regenerates PNG and SVG sprites.
2. `start`: Starts the development sequence, regenerates PNG and SVG sprites, opens your default browser and watches for changes.
3. `html`: Converts your `index.php` file to `index.html`.
4. `critical`: Using the `index.html` extracts the critical css and generates a `critical.css` file in the `assets/dist` folder which is then inlined in the `index.php` file.
5. `rm-html`: Deletes the `index.html` file.
6. `pwa`: Generates boilerplate files for a PWA. More info [here](https://github.com/scriptex/create-pwa).
7. `prod`: Runs 1, 4, 5, 6. (In this exact order).

In order to use the ability to generate critical CSS you must have the `php` binary exposed in your bash terminal.
More about PHP's commandline usage can be found [here](http://php.net/manual/en/features.commandline.php).

## Public vs. private projects

This starter boilerplate is licensed under the MIT open source license and is publicly available.

If you intend to use it to create a private and closed source project, please make sure to delete the `license` field in the `package.json` file and add `"private": true` in the same file.

This will make sure that you don't accidentally use an open source license for your private/closed source project.

## LICENSE

MIT

---


Connect with me:






 



 



 



 



 



 



 



 



 



 



 



---


Support and sponsor my work: