├── .editorconfig
├── .gitignore
├── README.md
├── docs
├── .nojekyll
├── icons-5b1f36bc41ab31f5b801d48ba1d65781
│ ├── .cache
│ ├── android-chrome-144x144.png
│ ├── android-chrome-192x192.png
│ ├── android-chrome-256x256.png
│ ├── android-chrome-36x36.png
│ ├── android-chrome-384x384.png
│ ├── android-chrome-48x48.png
│ ├── android-chrome-512x512.png
│ ├── android-chrome-72x72.png
│ ├── android-chrome-96x96.png
│ ├── apple-touch-icon-114x114.png
│ ├── apple-touch-icon-120x120.png
│ ├── apple-touch-icon-144x144.png
│ ├── apple-touch-icon-152x152.png
│ ├── apple-touch-icon-167x167.png
│ ├── apple-touch-icon-180x180.png
│ ├── apple-touch-icon-57x57.png
│ ├── apple-touch-icon-60x60.png
│ ├── apple-touch-icon-72x72.png
│ ├── apple-touch-icon-76x76.png
│ ├── apple-touch-icon-precomposed.png
│ ├── apple-touch-icon.png
│ ├── apple-touch-startup-image-1182x2208.png
│ ├── apple-touch-startup-image-1242x2148.png
│ ├── apple-touch-startup-image-1496x2048.png
│ ├── apple-touch-startup-image-1536x2008.png
│ ├── apple-touch-startup-image-320x460.png
│ ├── apple-touch-startup-image-640x1096.png
│ ├── apple-touch-startup-image-640x920.png
│ ├── apple-touch-startup-image-748x1024.png
│ ├── apple-touch-startup-image-750x1294.png
│ ├── apple-touch-startup-image-768x1004.png
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── firefox_app_128x128.png
│ ├── firefox_app_512x512.png
│ ├── firefox_app_60x60.png
│ ├── manifest.json
│ └── manifest.webapp
├── index.html
├── logo-on-dark-bg.785d2785b5343146017b.png
├── main.d579593aa27ff892b9db.js
├── main.d579593aa27ff892b9db.js.map
├── styles.de73248cd7905a4f68a216dee254362c.css
└── styles.de73248cd7905a4f68a216dee254362c.css.map
├── index.html
├── kickstarter.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── src
├── assets
│ ├── icon.png
│ └── logo-on-dark-bg.png
├── index.js
└── styles
│ └── index.scss
├── webpack.dev.js
└── webpack.prod.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 4
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | /node_modules
3 | dist
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # webpack-starter-basic
4 | [](http://forthebadge.com)[](http://forthebadge.com)
5 |
6 | [](https://david-dm.org/lifenautjoe/webpack-starter-basic)
7 |
8 | A simple **webpack 4 starter project** for your basic web development needs.
9 |
10 | Read more on the [demo website](https://lifenautjoe.github.io/webpack-starter-basic/) or continue reading below.
11 |
12 | ## Table of Contents
13 |
14 | - [Motivation](#motivation)
15 | - [Features](#features)
16 | - [Requirements](#requirements)
17 | - [Usage](#usage)
18 | - [FAQ](#faq)
19 | * [When should I use this starter?](#when-should-i-use-this-starter)
20 | * [Where's the common webpack config?](#wheres-the-common-webpack-config)
21 | * [How to load fonts](#how-to-load-fonts)
22 | * [How to load images](#how-to-load-images)
23 | + [In JavaScript](#in-javascript)
24 | + [In `index.html`](#in-indexhtml)
25 | * [How to install bootstrap 4](#how-to-install-bootstrap-4)
26 | - [Websites using this starter kit on the wild](#websites-using-this-starter-kit-on-the-wild)
27 |
28 | ## Motivation
29 |
30 | I needed to make a plain ol' "drop your mail to stay updated of ongoing developments" page.
31 |
32 | I did not need anything fancy, no frontend framework, no unit testing, simply a **starter project that would let me use sass, ES6, load assets, add vendor prefixes, start a dev server, generate sourcemaps and optimize everything for production.**
33 |
34 | I looked around and all I found were heavily specialized and complicated webpack starter projects (`webpack-angular-starter`, `webpack-react-starter`, etc) that are so intertwined with plugins that stripping undesired functionality is almost impossible.
35 |
36 | So I did this.
37 |
38 | ## Features
39 |
40 | * Separated development and production webpack settings you can understand
41 | * Sass
42 | * ES6
43 | * Asset loading
44 | * CSS Vendor prefixing
45 | * Development server
46 | * Sourcemaps
47 | * Favicons generation
48 | * Production optimizations
49 | * Mobile browser header color
50 |
51 | ## Requirements
52 |
53 | * [Node](https://nodejs.org) > 7.6
54 |
55 | ## Usage
56 |
57 | Substitute `PROJECT-NAME` for your project name.
58 |
59 | Clone the repository
60 |
61 | ```sh
62 | git clone https://github.com/lifenautjoe/webpack-starter-basic PROJECT-NAME
63 | cd PROJECT-NAME
64 | ```
65 |
66 | Install npm dependencies
67 |
68 | ```sh
69 | npm install
70 | ```
71 |
72 | Run the kickstart command
73 | ```sh
74 | npm run kickstart
75 | ```
76 |
77 | **After the project has been kickstarted**
78 |
79 | To start the development server
80 |
81 | ```sh
82 | npm start
83 | ```
84 |
85 | To build for production
86 |
87 | ```sh
88 | npm run build
89 | ```
90 |
91 | To preview the production build
92 | ```sh
93 | npm run preview
94 | ```
95 |
96 | ## FAQ
97 |
98 | ### When should I use this starter?
99 |
100 | You should use this starter if any of the following are true:
101 |
102 | * You want to make a static page. e.g. splash screen, onboarding screen, phaser game, threejs visualization, countdown.
103 | * You found no good starter kit for whatever you want to do and need a solid place to start from.
104 |
105 | **Please note**: If you are going to use a frontend framework like angular or react, you can of course add the required plugins and
106 | configuration but it's normally complicated and quirky enough that it's highly recommended to use one of the existing
107 | starter projects such as [react-webpack-babel](https://github.com/alicoding/react-webpack-babel) or for angular projects the [angular-cli](https://github.com/angular/angular-cli).
108 |
109 | ### Where's the common webpack config?
110 |
111 | **There is none and that is good thing.**
112 |
113 | The pattern creates unnecessary confusion over the setup, at the end the config will always be different across environments.
114 | People just put booleans everywhere on the common config to switch between these differing configuration options which is just awful to see and confusing for someone who's just starting on webpack.
115 |
116 | The only truly shared config between these files are the entry js point and the main html template.
117 |
118 | ### How to load fonts
119 |
120 | If you don't support Opera Mini, browsers support the .woff format. Its newer version .woff2, is widely supported by modern browsers and can be a good alternative.
121 |
122 | If you decide to use only this format you can load the fonts in a similar manner to images.
123 |
124 | In your `webpack.dev.js` and `webpack.prod.js` add the following
125 |
126 | ```js
127 | module.exports = {
128 | // ..
129 | module: {
130 | rules: [
131 | // ..
132 | {
133 | test: /\.woff$/,
134 | loader: 'url-loader',
135 | options: {
136 | // Limit at 50k. Above that it emits separate files
137 | limit: 50000,
138 | // url-loader sets mimetype if it's passed.
139 | // Without this it derives it from the file extension
140 | mimetype: 'application/font-woff',
141 | // Output below fonts directory
142 | name: './fonts/[name].[ext]',
143 | },
144 | }
145 | // ..
146 | ]
147 | }
148 | // ..
149 | };
150 | ```
151 |
152 | And let's say your font is in the folder `assets` with the name `pixel.woff`
153 |
154 | You can add it and use it in `index.scss` as
155 | ```scss
156 | @font-face {
157 | font-family: "Pixel";
158 | src: url('./../assets/pixel.woff') format('woff');
159 | }
160 |
161 | .body{
162 | font-family: 'Pixel', sans-serif;
163 | }
164 | ```
165 |
166 | If you would like to support all kinds of font types, remove the woff rule we previously added to `webpack.dev.js` and `webpack.prod.js` and add the following
167 |
168 | ```js
169 | module.exports = {
170 | // ..
171 | module: {
172 | rules: [
173 | // ..
174 | {
175 | test: /\.(ttf|eot|woff|woff2)$/,
176 | loader: 'file-loader',
177 | options: {
178 | name: 'fonts/[name].[ext]',
179 | },
180 | }
181 | // ..
182 | ]
183 | }
184 | // ..
185 | };
186 | ```
187 |
188 | And assuming you have your fonts in the directory `assets` with names `pixel.woff`, `pixel.ttf`, `pixel.eot` , etc.
189 |
190 | You can add it and use it in `index.scss` as
191 | ```scss
192 | @font-face {
193 | font-family: 'Pixel';
194 | src: url('./../assets/pixel.woff2') format('woff2'),
195 | url('./../assets/pixel.woff') format('woff'),
196 | url('./../assets/pixel.eot') format('embedded-opentype'),
197 | url('./../assets/pixel.ttf') format('truetype');
198 | /* Add other formats as you see fit */
199 | }
200 | ```
201 |
202 | ### How to load images
203 |
204 | #### In JavaScript
205 |
206 | You can require an image from JavaScript like
207 | ```js
208 | const myImage = require('./assets/icon.png');
209 | ```
210 |
211 | If the image size in bytes is smaller than `8192`you, `myImage` will be a string with the encoded image path such as
212 | ```
213 | data:image/svg+xml;base64,bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArICJhc3NldHMvaW1hZ2VzL3RpY2stQ3lydkhSdi5zdmciOw==
214 | ```
215 | If the image size is larger than `8192` it will be a string with the url to the image such as
216 | ```
217 | src/assets/icon.png?hash=5b1f36bc41ab31f5b801
218 | ```
219 |
220 | This limit is set so images like icons are not loaded through a request but you can force the loader to give you image urls always by doing the following but should not be necessary. The limit works 90% of the time.
221 | ```js
222 | const myImage = require('!!url!/assets/icon.png');
223 | ```
224 |
225 | #### In `index.html`
226 |
227 | If you would like to include an image on your `index.html` file, place the path of the image in a webpack require statement`<%= require(imagePath) %>`.
228 |
229 | ```html
230 |
233 | ```
234 |
235 | ### How to install Bootstrap 4
236 |
237 |
238 | **After the project has been kickstarted**
239 |
240 | Install bootstrap
241 | ````sh
242 | npm install bootstrap@4 --save
243 | ````
244 |
245 | Install bootstrap dependencies.
246 | ````sh
247 | npm install popper.js --save
248 | npm install jquery --save
249 | ````
250 |
251 | Replace the project `index.scss` with
252 |
253 | ````scss
254 | @import "~bootstrap/scss/bootstrap";
255 | ````
256 |
257 | And replace the project `index.js` with
258 | ````js
259 | require('./styles/index.scss');
260 |
261 | import PopperJs from 'popper.js';
262 | import jquery from 'jquery';
263 |
264 |
265 | jquery(()=>{
266 | console.log('Hello jQuery + bootstrap 4!');
267 | });
268 | ````
269 |
270 | To see it all come together, replace the index.html body tag with
271 |
272 | ````html
273 |
274 |
275 |
276 | Navbar
277 |
278 |
279 |
280 |
281 |
306 |
307 |
308 |
309 |
310 |
311 |
Bootstrap starter template
312 |
Use this document as a way to quickly start any new project. All you get is this text and a mostly barebones HTML document.
313 |
314 |
315 |
316 |
317 | ````
318 |
319 | Start the development server and `voilà`.
320 |
321 | ```sh
322 | npm start
323 | ```
324 |
325 | To build for production
326 |
327 | ```sh
328 | npm run build
329 | ```
330 |
331 | To preview the production build
332 | ```sh
333 | npm run preview
334 | ```
335 |
336 |
337 | ⚠️ Please remember to remove the Google Analytics tag in the `index.html` file as soon as you make the template yours.
338 |
339 | ```html
340 |
341 |
342 |
348 | ```
349 |
350 |
351 | ## Websites using this starter kit on the wild
352 |
353 | * [Droppable library](https://github.com/lifenautjoe/droppable)
354 | * [Noel Event Emitter](https://github.com/lifenautjoe/noel)
355 | * [ChooseIT Wishbot](http://voeux2018.choosit.com/)
356 | * [Webpack Starter Basic](https://lifenautjoe.github.io/webpack-starter-basic/)
357 | * [Okuna](https://www.okuna.io/)
358 |
359 | Have a website online built with this starter kit and would like to add it to the list? Open an issue!
360 |
361 |
362 | ___
363 | Author [Joel Hernandez](www.lifenautjoe.com)
364 |
365 |
--------------------------------------------------------------------------------
/docs/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/.nojekyll
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/.cache:
--------------------------------------------------------------------------------
1 | {"hash":"5b1f36bc41ab31f5b801d48ba1d65781","version":"0.0.8","optionHash":"2818e1de569e58609438eb1d5e36b23e","result":{"outputFilePrefix":"icons-5b1f36bc41ab31f5b801d48ba1d65781/","html":[" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "],"files":["icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-57x57.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-60x60.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-72x72.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-76x76.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-114x114.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-120x120.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-144x144.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-152x152.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-167x167.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-180x180.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-precomposed.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-36x36.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-48x48.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-72x72.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-96x96.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-144x144.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-192x192.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-256x256.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-384x384.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-512x512.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon-16x16.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon-32x32.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon.ico","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-320x460.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-640x920.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-748x1024.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-640x1096.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-750x1294.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-768x1004.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1182x2208.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1242x2148.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1496x2048.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1536x2008.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_60x60.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_512x512.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_128x128.png","icons-5b1f36bc41ab31f5b801d48ba1d65781/manifest.json","icons-5b1f36bc41ab31f5b801d48ba1d65781/manifest.webapp"]}}
2 |
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-144x144.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-192x192.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-256x256.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-36x36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-36x36.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-384x384.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-48x48.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-512x512.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-72x72.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/android-chrome-96x96.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-114x114.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-120x120.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-144x144.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-152x152.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-167x167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-167x167.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-180x180.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-57x57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-57x57.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-60x60.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-72x72.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-76x76.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-icon.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1182x2208.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1182x2208.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1242x2148.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1242x2148.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1496x2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1496x2048.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1536x2008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-1536x2008.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-320x460.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-320x460.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-640x1096.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-640x1096.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-640x920.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-640x920.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-748x1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-748x1024.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-750x1294.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-750x1294.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-768x1004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/apple-touch-startup-image-768x1004.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon-16x16.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon-32x32.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/favicon.ico
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_128x128.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_512x512.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/firefox_app_60x60.png
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Webpack Starter Basic",
3 | "short_name": "Webpack Starter Basic",
4 | "description": null,
5 | "dir": "auto",
6 | "lang": "en-US",
7 | "display": "standalone",
8 | "orientation": "any",
9 | "start_url": "/?homescreen=1",
10 | "background_color": "#fff",
11 | "icons": [
12 | {
13 | "src": "android-chrome-36x36.png",
14 | "sizes": "36x36",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "android-chrome-48x48.png",
19 | "sizes": "48x48",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "android-chrome-72x72.png",
24 | "sizes": "72x72",
25 | "type": "image/png"
26 | },
27 | {
28 | "src": "android-chrome-96x96.png",
29 | "sizes": "96x96",
30 | "type": "image/png"
31 | },
32 | {
33 | "src": "android-chrome-144x144.png",
34 | "sizes": "144x144",
35 | "type": "image/png"
36 | },
37 | {
38 | "src": "android-chrome-192x192.png",
39 | "sizes": "192x192",
40 | "type": "image/png"
41 | },
42 | {
43 | "src": "android-chrome-256x256.png",
44 | "sizes": "256x256",
45 | "type": "image/png"
46 | },
47 | {
48 | "src": "android-chrome-384x384.png",
49 | "sizes": "384x384",
50 | "type": "image/png"
51 | },
52 | {
53 | "src": "android-chrome-512x512.png",
54 | "sizes": "512x512",
55 | "type": "image/png"
56 | }
57 | ]
58 | }
59 |
--------------------------------------------------------------------------------
/docs/icons-5b1f36bc41ab31f5b801d48ba1d65781/manifest.webapp:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0",
3 | "name": "Webpack Starter Basic",
4 | "description": null,
5 | "icons": {
6 | "60": "firefox_app_60x60.png",
7 | "128": "firefox_app_128x128.png",
8 | "512": "firefox_app_512x512.png"
9 | },
10 | "developer": {
11 | "name": null,
12 | "url": null
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Webpack Starter Basic
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | VIDEO
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
I'm a a simple webpack 4 starter project for your basic web development needs.
42 |
43 |
48 |
49 |
No wizard code ,
50 | understandable, scalable.
51 |
52 |
53 | A
minimal yet
rich set of features to get you going.
54 |
55 |
56 | Show features
57 |
58 |
88 |
89 |
90 |
91 |
92 | git clone https://github.com/lifenautjoe/webpack-starter-basic PROJECT-NAME
93 |
94 |
95 | cd PROJECT-NAME
96 |
97 |
98 | npm install
99 |
100 |
101 | npm run kickstart
102 |
103 |
104 | npm run start
105 |
106 |
107 | npm run build
108 |
109 |
110 |
111 |
Have an issue or are in need of guidance?
112 |
Open an issue here .
114 |
115 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
131 |
132 |
133 |
134 |
--------------------------------------------------------------------------------
/docs/logo-on-dark-bg.785d2785b5343146017b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/docs/logo-on-dark-bg.785d2785b5343146017b.png
--------------------------------------------------------------------------------
/docs/main.d579593aa27ff892b9db.js:
--------------------------------------------------------------------------------
1 | !function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=0)}([function(e,n,t){"use strict";t(7),t(2),document.addEventListener("DOMContentLoaded",function(){var e=document.getElementById("plugins-trigger"),n=document.getElementById("plugins");e.onclick=function(){n.classList.toggle("splash-overview-plugins__list--visible")}})},,function(e,n){},,,,,function(e,n){}]);
2 | //# sourceMappingURL=main.d579593aa27ff892b9db.js.map
--------------------------------------------------------------------------------
/docs/main.d579593aa27ff892b9db.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","document","addEventListener","pluginsTriggerElement","getElementById","pluginsElement","onclick","classList","toggle"],"mappings":"aACA,IAAAA,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAC,QAGA,IAAAC,EAAAJ,EAAAE,IACAG,EAAAH,EACAI,GAAA,EACAH,YAUA,OANAI,EAAAL,GAAAM,KAAAJ,EAAAD,QAAAC,IAAAD,QAAAF,GAGAG,EAAAE,GAAA,EAGAF,EAAAD,QAKAF,EAAAQ,EAAAF,EAGAN,EAAAS,EAAAV,EAGAC,EAAAU,EAAA,SAAAR,EAAAS,EAAAC,GACAZ,EAAAa,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAjB,GACAY,OAAAC,eAAAb,EAAA,cAAiDkB,OAAA,KAIjDpB,EAAAqB,EAAA,SAAAlB,GACA,IAAAS,EAAAT,KAAAmB,WACA,WAA2B,OAAAnB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAH,EAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDxB,EAAA2B,EAAA,GAIA3B,IAAA4B,EAAA,kCClEA5B,EAAQ,GACRA,EAAQ,GAER6B,SAASC,iBAAiB,mBAAoB,WAE1C,IAAMC,EAAwBF,SAASG,eAAe,mBAChDC,EAAiBJ,SAASG,eAAe,WAI/CD,EAAsBG,QAAU,WAC5BD,EAAeE,UAAUC,OAHD","file":"main.d579593aa27ff892b9db.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","\nrequire('normalize.css/normalize.css');\nrequire('./styles/index.scss');\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n\n const pluginsTriggerElement = document.getElementById('plugins-trigger');\n const pluginsElement = document.getElementById('plugins');\n\n const pluginsVisibleClass = \"splash-overview-plugins__list--visible\";\n\n pluginsTriggerElement.onclick = () => {\n pluginsElement.classList.toggle(pluginsVisibleClass);\n }\n});\n"],"sourceRoot":""}
--------------------------------------------------------------------------------
/docs/styles.de73248cd7905a4f68a216dee254362c.css:
--------------------------------------------------------------------------------
1 | html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}body,html{height:100%;width:100%;font-size:100%;font-family:Roboto,sans-serif;text-align:center;font-weight:lighter}a{color:inherit}button{cursor:pointer;outline:none;font-weight:300;background-color:#1dce94;border:none;border-radius:500px;color:#fff;padding:.5rem 1rem;transition:all .3s}button:hover{color:#1dce94;background-color:#fff}button:active{background-color:#cbcbcb}.splash{height:100%;width:100%}.splash,.splash__content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.splash__content{top:5%;right:0;left:0;padding:.5rem 1rem;max-width:480px}.splash-title{margin-bottom:1rem;max-width:200px;height:auto}.splash-title__img{height:auto;width:100%;color:#fff;margin:0;padding:.5rem 1rem}.splash-overview{background-color:#fff;border-radius:5px;box-shadow:0 0 12px 0 rgba(0,0,0,.1),0 10px 25px 0 rgba(0,0,0,.2);margin-bottom:4rem}.splash-overview-footer{padding:2rem;background-color:#fff;font-size:80%}.splash-overview__heading{font-size:150%;padding:1.5rem;margin:0}.splash-overview__star{margin-bottom:2rem}.splash-overview__details{background-color:#323bff;color:#fff;padding:2rem}.splash-overview-plugins{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-top:2rem;background-color:rgba(0,0,0,.4);padding:1rem}.splash-overview-plugins__list{text-align:center;margin:0;padding:0;list-style:none;padding-top:1.4rem;transition:all 1s ease-out;display:none}.splash-overview-plugins__list--visible{display:block}.splash-overview-plugins__item{margin-bottom:1rem}.splash-overview__conclusion{background-color:#ff4970;color:#fff;padding:2rem}.splash-overview-start{font-size:80%;background-color:#022b36;color:#c6c6c6;padding:2rem;text-align:left}.splash-overview-start__command{margin-bottom:.3rem}.splash-overview-start__command:before{content:"$";font-weight:700;margin-right:.2rem}.splash-overview-start__comment{color:#a3a3a3}.splash-overview-issues{background-color:#fd8c68;color:#fff;padding:2rem}*{box-sizing:border-box}.video-background{background:#000;position:fixed;top:0;right:0;bottom:0;left:0;z-index:-99}.video-background iframe,.video-foreground{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}#vidtop-content,.vid-info{top:0;color:#fff}.vid-info{position:absolute;right:0;width:33%;background:rgba(0,0,0,.3);padding:1rem;font-family:Avenir,Helvetica,sans-serif}.vid-info h1{font-size:2rem;font-weight:700;margin-top:0;line-height:1.2}.vid-info a{display:block;color:#fff;text-decoration:none;background:rgba(0,0,0,.5);transition:background .6s;border-bottom:none;margin:1rem auto;text-align:center}@media (min-aspect-ratio:16/9){.video-foreground{height:300%;top:-100%}}@media (max-aspect-ratio:16/9){.video-foreground{width:300%;left:-100%}}@media (max-width:600px){.vid-info{width:50%;padding:.5rem}.vid-info h1{margin-bottom:.2rem}}@media (max-width:500px){.vid-info .acronym{display:none}}
2 | /*# sourceMappingURL=styles.de73248cd7905a4f68a216dee254362c.css.map */
--------------------------------------------------------------------------------
/docs/styles.de73248cd7905a4f68a216dee254362c.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["styles.de73248cd7905a4f68a216dee254362c.css"],"names":[],"mappings":"AAOA,KACE,iBAAkB,AAElB,6BAA+B,CAEhC,AAOD,KACE,QAAU,CACX,AAMD,GACE,cAAe,AACf,cAAiB,CAClB,AAQD,GACE,uBAAwB,AAExB,SAAU,AAEV,gBAAkB,CAEnB,AAMD,IACE,gCAAkC,AAElC,aAAe,CAEhB,AAOD,EACE,4BAA8B,CAC/B,AAMD,YACE,mBAAoB,AAEpB,0BAA2B,AAE3B,gCAAkC,CAEnC,AAKD,SAEE,kBAAoB,CACrB,AAMD,cAGE,gCAAkC,AAElC,aAAe,CAEhB,AAKD,MACE,aAAe,CAChB,AAMD,QAEE,cAAe,AACf,cAAe,AACf,kBAAmB,AACnB,uBAAyB,CAC1B,AAED,IACE,aAAgB,CACjB,AAED,IACE,SAAY,CACb,AAOD,IACE,iBAAmB,CACpB,AAQD,sCAKE,oBAAqB,AAErB,eAAgB,AAEhB,iBAAkB,AAElB,QAAU,CAEX,AAMD,aAGE,gBAAkB,CACnB,AAMD,cAGE,mBAAqB,CACtB,AAKD,gDAIE,yBAA2B,CAC5B,AAKD,wHAIE,kBAAmB,AACnB,SAAW,CACZ,AAKD,4GAIE,6BAA+B,CAChC,AAKD,SACE,0BAA+B,CAChC,AAQD,OACE,sBAAuB,AAEvB,cAAe,AAEf,cAAe,AAEf,eAAgB,AAEhB,UAAW,AAEX,kBAAoB,CAErB,AAKD,SACE,uBAAyB,CAC1B,AAKD,SACE,aAAe,CAChB,AAMD,6BAEE,sBAAuB,AAEvB,SAAW,CAEZ,AAKD,kFAEE,WAAa,CACd,AAMD,cACE,6BAA8B,AAE9B,mBAAqB,CAEtB,AAKD,yCACE,uBAAyB,CAC1B,AAMD,6BACE,0BAA2B,AAE3B,YAAc,CAEf,AAOD,QACE,aAAe,CAChB,AAKD,QACE,iBAAmB,CACpB,AAcD,kBACE,YAAc,CACf,AACD,UACE,YAAa,AACb,WAAY,AACZ,eAAgB,AAChB,8BAAkC,AAClC,kBAAmB,AACnB,mBAAqB,CACtB,AAED,EACE,aAAe,CAChB,AAED,OACE,eAAgB,AAChB,aAAc,AACd,gBAAiB,AACjB,yBAA0B,AAC1B,YAAa,AACb,oBAAqB,AACrB,WAAa,AACb,mBAAqB,AACrB,kBAAqB,CACtB,AAED,aACE,cAAe,AACf,qBAAwB,CACzB,AAED,cACE,wBAA0B,CAC3B,AAED,QAQE,YAAa,AACb,UAAY,CACb,AAED,yBAXE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,0BAA2B,AACvB,sBAAuB,AAC3B,sBAAuB,AACnB,kBAAoB,CAkBzB,AAbD,iBAEE,OAAQ,AACR,QAAS,AACT,OAAQ,AAOR,mBAAqB,AACrB,eAAiB,CAClB,AAED,cACE,mBAAoB,AACpB,gBAAiB,AACjB,WAAa,CACd,AAED,mBACE,YAAa,AACb,WAAY,AACZ,WAAa,AACb,SAAU,AACV,kBAAqB,CACtB,AAED,iBACE,sBAAwB,AACxB,kBAAmB,AACnB,kEAA4E,AAC5E,kBAAoB,CACrB,AAED,wBACE,aAAc,AACd,sBAAwB,AACxB,aAAe,CAChB,AAED,0BACE,eAAgB,AAChB,eAAgB,AAChB,QAAU,CACX,AAED,uBACE,kBAAoB,CACrB,AAED,0BACE,yBAA0B,AAC1B,WAAa,AACb,YAAc,CACf,AAED,yBACE,oBAAqB,AACrB,aAAc,AACd,0BAA2B,AACvB,sBAAuB,AAC3B,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,uBAAwB,AAC5B,gBAAiB,AACjB,gCAAqC,AACrC,YAAc,CACf,AAED,+BACE,kBAAmB,AACnB,SAAU,AACV,UAAW,AACX,gBAAiB,AACjB,mBAAoB,AACpB,2BAA4B,AAC5B,YAAc,CACf,AAED,wCACE,aAAe,CAChB,AAED,+BACE,kBAAoB,CACrB,AAED,6BACE,yBAA0B,AAC1B,WAAa,AACb,YAAc,CACf,AAED,uBACE,cAAe,AACf,yBAA0B,AAC1B,cAAe,AACf,aAAc,AACd,eAAiB,CAClB,AAED,gCACE,mBAAsB,CACvB,AAED,uCACE,YAAa,AACb,gBAAkB,AAClB,kBAAqB,CACtB,AAED,gCACE,aAAe,CAChB,AAED,wBACE,yBAA0B,AAC1B,WAAa,AACb,YAAc,CACf,AAED,EACE,qBAAuB,CACxB,AAED,kBACE,gBAAiB,AACjB,eAAgB,AAChB,MAAO,AACP,QAAS,AACT,SAAU,AACV,OAAQ,AACR,WAAa,CACd,AAED,2CAEE,kBAAmB,AACnB,MAAO,AACP,OAAQ,AACR,WAAY,AACZ,YAAa,AACb,mBAAqB,CACtB,AAOD,0BAJE,MAAO,AACP,UAAY,CAYb,AATD,UACE,kBAAmB,AAEnB,QAAS,AACT,UAAW,AACX,0BAA+B,AAE/B,aAAc,AACd,uCAA2C,CAC5C,AAED,aACE,eAAgB,AAChB,gBAAiB,AACjB,aAAc,AACd,eAAiB,CAClB,AAED,YACE,cAAe,AACf,WAAY,AACZ,qBAAsB,AACtB,0BAA+B,AAC/B,0BAA2B,AAC3B,mBAAoB,AACpB,iBAAkB,AAClB,iBAAmB,CACpB,AAED,+BACE,kBACE,YAAa,AACb,SAAW,CACZ,CACF,AAED,+BACE,kBACE,WAAY,AACZ,UAAY,CACb,CACF,AAED,yBACE,UACE,UAAW,AACX,aAAe,CAChB,AACD,aACE,mBAAqB,CACtB,CACF,AAED,yBACE,mBACE,YAAc,CACf,CACF","file":"styles.de73248cd7905a4f68a216dee254362c.css","sourcesContent":["/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */\n/* Document\n ========================================================================== */\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\nhtml {\n line-height: 1.15;\n /* 1 */\n -webkit-text-size-adjust: 100%;\n /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n/**\n * Remove the margin in all browsers.\n */\nbody {\n margin: 0;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\nhr {\n box-sizing: content-box;\n /* 1 */\n height: 0;\n /* 1 */\n overflow: visible;\n /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\npre {\n font-family: monospace, monospace;\n /* 1 */\n font-size: 1em;\n /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n/**\n * Remove the gray background on active links in IE 10.\n */\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\nabbr[title] {\n border-bottom: none;\n /* 1 */\n text-decoration: underline;\n /* 2 */\n text-decoration: underline dotted;\n /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n /* 1 */\n font-size: 1em;\n /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n/**\n * Remove the border on images inside links in IE 10.\n */\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit;\n /* 1 */\n font-size: 100%;\n /* 1 */\n line-height: 1.15;\n /* 1 */\n margin: 0;\n /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\nlegend {\n box-sizing: border-box;\n /* 1 */\n color: inherit;\n /* 2 */\n display: table;\n /* 1 */\n max-width: 100%;\n /* 1 */\n padding: 0;\n /* 3 */\n white-space: normal;\n /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box;\n /* 1 */\n padding: 0;\n /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n[type=\"search\"] {\n -webkit-appearance: textfield;\n /* 1 */\n outline-offset: -2px;\n /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n /* 1 */\n font: inherit;\n /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n/**\n * Add the correct display in IE 10+.\n */\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n[hidden] {\n display: none;\n}\nhtml, body {\n height: 100%;\n width: 100%;\n font-size: 100%;\n font-family: 'Roboto', sans-serif;\n text-align: center;\n font-weight: lighter;\n}\n\na {\n color: inherit;\n}\n\nbutton {\n cursor: pointer;\n outline: none;\n font-weight: 300;\n background-color: #1dce94;\n border: none;\n border-radius: 500px;\n color: white;\n padding: 0.5rem 1rem;\n transition: all 0.3s;\n}\n\nbutton:hover {\n color: #1dce94;\n background-color: white;\n}\n\nbutton:active {\n background-color: #cbcbcb;\n}\n\n.splash {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: center;\n align-items: center;\n height: 100%;\n width: 100%;\n}\n\n.splash__content {\n position: relative;\n top: 5%;\n right: 0;\n left: 0;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.5rem 1rem;\n max-width: 480px;\n}\n\n.splash-title {\n margin-bottom: 1rem;\n max-width: 200px;\n height: auto;\n}\n\n.splash-title__img {\n height: auto;\n width: 100%;\n color: white;\n margin: 0;\n padding: 0.5rem 1rem;\n}\n\n.splash-overview {\n background-color: white;\n border-radius: 5px;\n box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.1), 0 10px 25px 0 rgba(0, 0, 0, 0.2);\n margin-bottom: 4rem;\n}\n\n.splash-overview-footer {\n padding: 2rem;\n background-color: white;\n font-size: 80%;\n}\n\n.splash-overview__heading {\n font-size: 150%;\n padding: 1.5rem;\n margin: 0;\n}\n\n.splash-overview__star {\n margin-bottom: 2rem;\n}\n\n.splash-overview__details {\n background-color: #323bff;\n color: white;\n padding: 2rem;\n}\n\n.splash-overview-plugins {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-top: 2rem;\n background-color: rgba(0, 0, 0, 0.4);\n padding: 1rem;\n}\n\n.splash-overview-plugins__list {\n text-align: center;\n margin: 0;\n padding: 0;\n list-style: none;\n padding-top: 1.4rem;\n transition: all 1s ease-out;\n display: none;\n}\n\n.splash-overview-plugins__list--visible {\n display: block;\n}\n\n.splash-overview-plugins__item {\n margin-bottom: 1rem;\n}\n\n.splash-overview__conclusion {\n background-color: #ff4970;\n color: white;\n padding: 2rem;\n}\n\n.splash-overview-start {\n font-size: 80%;\n background-color: #022b36;\n color: #c6c6c6;\n padding: 2rem;\n text-align: left;\n}\n\n.splash-overview-start__command {\n margin-bottom: 0.3rem;\n}\n\n.splash-overview-start__command:before {\n content: '$';\n font-weight: bold;\n margin-right: 0.2rem;\n}\n\n.splash-overview-start__comment {\n color: #A3A3A3;\n}\n\n.splash-overview-issues {\n background-color: #fd8c68;\n color: white;\n padding: 2rem;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.video-background {\n background: #000;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -99;\n}\n\n.video-foreground,\n.video-background iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n\n#vidtop-content {\n top: 0;\n color: #fff;\n}\n\n.vid-info {\n position: absolute;\n top: 0;\n right: 0;\n width: 33%;\n background: rgba(0, 0, 0, 0.3);\n color: #fff;\n padding: 1rem;\n font-family: Avenir, Helvetica, sans-serif;\n}\n\n.vid-info h1 {\n font-size: 2rem;\n font-weight: 700;\n margin-top: 0;\n line-height: 1.2;\n}\n\n.vid-info a {\n display: block;\n color: #fff;\n text-decoration: none;\n background: rgba(0, 0, 0, 0.5);\n transition: .6s background;\n border-bottom: none;\n margin: 1rem auto;\n text-align: center;\n}\n\n@media (min-aspect-ratio: 16 / 9) {\n .video-foreground {\n height: 300%;\n top: -100%;\n }\n}\n\n@media (max-aspect-ratio: 16 / 9) {\n .video-foreground {\n width: 300%;\n left: -100%;\n }\n}\n\n@media all and (max-width: 600px) {\n .vid-info {\n width: 50%;\n padding: .5rem;\n }\n .vid-info h1 {\n margin-bottom: .2rem;\n }\n}\n\n@media all and (max-width: 500px) {\n .vid-info .acronym {\n display: none;\n }\n}\n"]}
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{projectName}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | VIDEO
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
I'm a simple webpack 4 starter project for your basic web development needs.
42 |
43 |
48 |
49 |
No wizard code ,
50 | understandable, scalable.
51 |
52 |
53 | A
minimal yet
rich set of features to get you going.
54 |
55 |
56 | Show features
57 |
58 |
88 |
89 |
90 |
91 |
92 | git clone https://github.com/lifenautjoe/webpack-starter-basic PROJECT-NAME
93 |
94 |
95 | cd PROJECT-NAME
96 |
97 |
98 | npm install
99 |
100 |
101 | npm run kickstart
102 |
103 |
104 | npm run start
105 |
106 |
107 | npm run build
108 |
109 |
110 |
111 |
Have an issue or are in need of guidance?
112 |
Open an issue here .
114 |
115 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
131 |
132 |
133 |
134 |
--------------------------------------------------------------------------------
/kickstarter.js:
--------------------------------------------------------------------------------
1 | const inquirer = require('inquirer');
2 | const ui = new inquirer.ui.BottomBar();
3 | const fs = require('fs');
4 | const rimraf = require('rimraf');
5 |
6 | const packageJson = require('./package.json');
7 |
8 | async function kickstart() {
9 |
10 | const questions = await inquirer.prompt([
11 | {
12 | type: 'input',
13 | name: 'projectName',
14 | message: `What's the name of your project? (kebab-cased)`,
15 | default: 'awesome-project'
16 | },
17 | {
18 | type: 'input',
19 | name: 'projectAuthor',
20 | message: `Who's the author?`,
21 | default: 'John Doe'
22 | },
23 | {
24 | type: 'input',
25 | name: 'mobileHeaderColor',
26 | message: 'What color would you like the mobile header to be? (https://bit.ly/1LX2mtq)',
27 | default: '#ff4970'
28 | }
29 | ]);
30 |
31 | const {projectName, projectAuthor, mobileHeaderColor} = questions;
32 |
33 | ui.log.write('Removing /docs directory');
34 | rimraf.sync('./docs');
35 |
36 | ui.log.write('Updating package.json name');
37 | packageJson.name = projectName;
38 | ui.log.write('Updating package.json author');
39 | packageJson.author = projectAuthor;
40 |
41 | packageJson.description = '';
42 |
43 | ui.log.write('Removing package.json git repository');
44 | packageJson.keywords = [];
45 | packageJson.repository.url = '';
46 |
47 | ui.log.write('Removing package.json kickstart dependencies');
48 | packageJson.kickstartDependencies.forEach((kickstartDependency) => {
49 | delete packageJson.devDependencies[kickstartDependency];
50 | rimraf.sync(`./node-modules/${kickstartDependency}`);
51 | });
52 |
53 | delete packageJson.kickstartDependencies;
54 |
55 | packageJson.homepage = '';
56 | packageJson.bugs.url = '';
57 |
58 | ui.log.write('Removing package.json kickstart script');
59 | delete packageJson.scripts.kickstart;
60 |
61 | ui.log.write('Writing new package.json');
62 | fs.writeFileSync('./package.json', JSON.stringify(packageJson, null, 4));
63 |
64 | ui.log.write('Removing package-lock.json');
65 | fs.unlinkSync('./package-lock.json');
66 |
67 | const indexFile = fs.readFileSync('./index.html', 'utf8');
68 |
69 | ui.log.write(`Setting mobile header color to ${mobileHeaderColor}`);
70 | let newIndex = indexFile.replace(/{{mobileHeaderColor}}/g, mobileHeaderColor);
71 | const webpackProdFile = fs.readFileSync('./webpack.prod.js', 'utf8');
72 |
73 | ui.log.write('Setting page title to project name');
74 | newIndex = newIndex.replace(/{{projectName}}/g, projectName);
75 | const newWebpackProdFile = webpackProdFile.replace(/{{projectName}}/g, projectName);
76 |
77 | ui.log.write('Writing new index.html');
78 | fs.writeFileSync('./index.html', newIndex, 'utf8');
79 | ui.log.write('Writing new webpack.prod.js');
80 | fs.writeFileSync('./webpack.prod.js', newWebpackProdFile, 'utf8');
81 |
82 | ui.log.write('Removing kickstarter script');
83 | fs.unlinkSync('./kickstarter.js');
84 |
85 | ui.log.write('Removing .git directory');
86 | rimraf.sync('.git');
87 |
88 | ui.log.write('All done!');
89 | }
90 |
91 | kickstart();
92 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-starter-basic",
3 | "version": "2.0.0",
4 | "description": "A simple and reliable webpack starter kit for your web adventures needs.",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "webpack-dev-server --config webpack.dev.js --mode development",
9 | "build": "webpack --config webpack.prod.js --mode production",
10 | "preview": "npm run build && http-server dist",
11 | "kickstart": "node kickstarter"
12 | },
13 | "repository": {
14 | "type": "git",
15 | "url": "git+https://github.com/lifenautjoe/webpack-starter-basic.git"
16 | },
17 | "keywords": [
18 | "webpack4",
19 | "webpack",
20 | "starter",
21 | "starter-kit",
22 | "kit",
23 | "webpack",
24 | "seed",
25 | "webpack-seed",
26 | "webpack4-seed",
27 | "webpack4-boilerplate",
28 | "boilerplate",
29 | "javascript",
30 | "js",
31 | "es6",
32 | "es6-starter",
33 | "js-starter",
34 | "es6-starter-kit"
35 | ],
36 | "author": "Joel Hernandez",
37 | "license": "ISC",
38 | "bugs": {
39 | "url": "https://github.com/lifenautjoe/webpack-starter-basic/issues"
40 | },
41 | "homepage": "https://github.com/lifenautjoe/webpack-starter-basic#readme",
42 | "dependencies": {
43 | "normalize.css": "^8.0.0"
44 | },
45 | "devDependencies": {
46 | "@fullhuman/postcss-purgecss": "^1.1.0",
47 | "ajv": "^6.3.0",
48 | "autoprefixer": "^9.3.1",
49 | "babel-core": "^6.26.3",
50 | "babel-loader": "^7.1.4",
51 | "babel-preset-env": "^1.7.0",
52 | "clean-webpack-plugin": "^0.1.19",
53 | "css-loader": "^0.28.11",
54 | "cssnano": "^3.10.0",
55 | "favicons-webpack-plugin": "0.0.9",
56 | "file-loader": "^1.1.11",
57 | "html-webpack-plugin": "^3.1.0",
58 | "http-server": "^0.11.1",
59 | "inquirer": "^5.1.0",
60 | "mini-css-extract-plugin": "^0.5.0",
61 | "node-sass": "^4.10.0",
62 | "optimize-css-assets-webpack-plugin": "^4.0.0",
63 | "postcss-loader": "^2.1.3",
64 | "rimraf": "^2.6.2",
65 | "sass-loader": "^6.0.7",
66 | "source-map-loader": "^0.2.3",
67 | "style-loader": "^0.20.3",
68 | "url-loader": "^1.0.1",
69 | "webpack": "^4.20.2",
70 | "webpack-cli": "^3.1.1",
71 | "webpack-dev-server": "^3.1.11"
72 | },
73 | "kickstartDependencies": [
74 | "inquirer",
75 | "rimraf"
76 | ]
77 | }
78 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | /*
2 | * PostCSS is a tool for transforming styles with JS plugins.
3 | * These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more.
4 | * https://github.com/postcss/postcss
5 | */
6 |
7 | const purgecss = require('@fullhuman/postcss-purgecss');
8 | const autoprefixer = require('autoprefixer');
9 |
10 | module.exports = {
11 | plugins: [
12 | /*
13 | * Remove unused CSS
14 | */
15 | purgecss({
16 | content: ['./**/*.html']
17 | }),
18 | /*
19 | * Adds vendor prefixes to css attributes
20 | * https://github.com/postcss/autoprefixer
21 | */
22 | autoprefixer({
23 | /* It should add vendor prefixes for the last 2 versions of all browsers, meaning old prefixes such as
24 | * -webkit-border-radius: 5px; that the latest browsers support as border-radius won't be added.
25 | * https://github.com/ai/browserslist#queries
26 | */
27 | browsers: 'last 2 versions'
28 | }),
29 | ]
30 | };
31 |
--------------------------------------------------------------------------------
/src/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/src/assets/icon.png
--------------------------------------------------------------------------------
/src/assets/logo-on-dark-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lifenautjoe/webpack-starter-basic/655fad100c0b4b0c544d45b5058bf257ab6c9eeb/src/assets/logo-on-dark-bg.png
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 |
2 | require('normalize.css/normalize.css');
3 | require('./styles/index.scss');
4 |
5 | document.addEventListener("DOMContentLoaded", () => {
6 |
7 | const pluginsTriggerElement = document.getElementById('plugins-trigger');
8 | const pluginsElement = document.getElementById('plugins');
9 |
10 | const pluginsVisibleClass = "splash-overview-plugins__list--visible";
11 |
12 | pluginsTriggerElement.onclick = () => {
13 | pluginsElement.classList.toggle(pluginsVisibleClass);
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/src/styles/index.scss:
--------------------------------------------------------------------------------
1 | html, body {
2 | height: 100%;
3 | width: 100%;
4 | font-size: 100%;
5 | font-family: 'Roboto', sans-serif;
6 | text-align: center;
7 | font-weight: lighter;
8 | }
9 |
10 | a{
11 | color: inherit;
12 | }
13 |
14 | button{
15 | cursor: pointer;
16 | outline:none;
17 | font-weight: 300;
18 | background-color: #1dce94;
19 | border: none;
20 | border-radius: 500px;
21 | color: white;
22 | padding:0.5rem 1rem;
23 | transition: all 0.3s;
24 |
25 | &:hover{
26 | color: #1dce94;
27 | background-color: white;
28 | }
29 |
30 | &:active{
31 | background-color: #cbcbcb;
32 | }
33 | }
34 |
35 | .splash {
36 | position: relative;
37 | display: flex;
38 | flex-direction: column;
39 | align-items: center;
40 | height: 100%;
41 | width: 100%;
42 | }
43 |
44 | .splash__content {
45 | position: relative;
46 | top: 5%;
47 | right: 0;
48 | left: 0;
49 | display: flex;
50 | flex-direction: column;
51 | align-items: center;
52 | padding:0.5rem 1rem;
53 | max-width: 480px;
54 | }
55 |
56 | .splash-title {
57 | margin-bottom: 1rem;
58 | max-width: 200px;
59 | height: auto;
60 | }
61 |
62 | .splash-title__img{
63 | height: auto;
64 | width: 100%;
65 | color: white;
66 | margin: 0;
67 | padding:0.5rem 1rem;
68 | }
69 |
70 |
71 | .splash-overview{
72 | background-color: white;
73 | border-radius: 5px;
74 | box-shadow: 0 0 12px 0 rgba(0,0,0,0.1), 0 10px 25px 0 rgba(0,0,0,0.2);
75 | margin-bottom: 4rem;
76 | }
77 |
78 | .splash-overview-footer{
79 | padding: 2rem;
80 | background-color: white;
81 | font-size: 80%;
82 | }
83 |
84 | .splash-overview__heading{
85 | font-size: 150%;
86 | padding:1.5rem;
87 | margin:0;
88 | }
89 |
90 | .splash-overview__star{
91 | margin-bottom: 2rem;
92 | }
93 |
94 | .splash-overview__details{
95 | background-color: #323bff;
96 | color: white;
97 | padding:2rem;
98 | }
99 |
100 | .splash-overview-plugins{
101 | display: flex;
102 | flex-direction: column;
103 | align-items: center;
104 | justify-content: center;
105 | margin-top: 2rem;
106 | background-color: rgba(0,0,0,0.4);
107 | padding:1rem;
108 | }
109 |
110 | .splash-overview-plugins__list{
111 | text-align: center;
112 | margin:0;
113 | padding: 0;
114 | list-style: none;
115 | padding-top: 1.4rem;
116 | transition: all 1s ease-out;
117 | display: none;
118 | &--visible{
119 | display: block;
120 | }
121 | }
122 |
123 | .splash-overview-plugins__item{
124 | margin-bottom: 1rem;
125 | }
126 |
127 | .splash-overview__conclusion{
128 | background-color: #ff4970;
129 | color: white;
130 | padding:2rem;
131 | }
132 |
133 | .splash-overview-start{
134 | font-size: 80%;
135 | background-color: #022b36;
136 | color: #c6c6c6;
137 | padding:2rem;
138 | text-align: left;
139 | }
140 |
141 | .splash-overview-start__command{
142 | margin-bottom: 0.3rem;
143 | &:before {
144 | content: '$';
145 | font-weight: bold;
146 | margin-right: 0.2rem;
147 | }
148 | }
149 |
150 | .splash-overview-start__comment{
151 | color: #A3A3A3;
152 | }
153 |
154 | .splash-overview-issues{
155 | background-color: #fd8c68;
156 | color: white;
157 | padding:2rem;
158 | }
159 |
160 |
161 | * { box-sizing: border-box; }
162 | .video-background {
163 | background: #000;
164 | position: fixed;
165 | top: 0; right: 0; bottom: 0; left: 0;
166 | z-index: -99;
167 | }
168 | .video-foreground,
169 | .video-background iframe {
170 | position: absolute;
171 | top: 0;
172 | left: 0;
173 | width: 100%;
174 | height: 100%;
175 | pointer-events: none;
176 | }
177 | #vidtop-content {
178 | top: 0;
179 | color: #fff;
180 | }
181 | .vid-info { position: absolute; top: 0; right: 0; width: 33%; background: rgba(0,0,0,0.3); color: #fff; padding: 1rem; font-family: Avenir, Helvetica, sans-serif; }
182 | .vid-info h1 { font-size: 2rem; font-weight: 700; margin-top: 0; line-height: 1.2; }
183 | .vid-info a { display: block; color: #fff; text-decoration: none; background: rgba(0,0,0,0.5); transition: .6s background; border-bottom: none; margin: 1rem auto; text-align: center; }
184 | @media (min-aspect-ratio: 16/9) {
185 | .video-foreground { height: 300%; top: -100%; }
186 | }
187 | @media (max-aspect-ratio: 16/9) {
188 | .video-foreground { width: 300%; left: -100%; }
189 | }
190 | @media all and (max-width: 600px) {
191 | .vid-info { width: 50%; padding: .5rem; }
192 | .vid-info h1 { margin-bottom: .2rem; }
193 | }
194 | @media all and (max-width: 500px) {
195 | .vid-info .acronym { display: none; }
196 | }
197 |
--------------------------------------------------------------------------------
/webpack.dev.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | const HtmlWebpackPlugin = require('html-webpack-plugin');
4 |
5 | module.exports = {
6 | devtool: 'eval-cheap-module-source-map',
7 | entry: './src/index.js',
8 | devServer: {
9 | port: 8080,
10 | contentBase: path.join(__dirname, "dist")
11 | },
12 | node: {
13 | fs: 'empty'
14 | },
15 | module: {
16 | rules: [
17 | {
18 | test: /\.js$/,
19 | exclude: /node_modules/,
20 | loader: 'babel-loader',
21 | options: {
22 | presets: ['env']
23 | }
24 | },
25 | {
26 | test: /\.(scss|css)$/,
27 | use: [
28 | {
29 | // creates style nodes from JS strings
30 | loader: "style-loader",
31 | options: {
32 | sourceMap: true
33 | }
34 | },
35 | {
36 | // translates CSS into CommonJS
37 | loader: "css-loader",
38 | options: {
39 | sourceMap: true
40 | }
41 | },
42 | {
43 | // compiles Sass to CSS
44 | loader: "sass-loader",
45 | options: {
46 | outputStyle: 'expanded',
47 | sourceMap: true,
48 | sourceMapContents: true
49 | }
50 | }
51 | // Please note we are not running postcss here
52 | ]
53 | }
54 | ,
55 | {
56 | // Load all images as base64 encoding if they are smaller than 8192 bytes
57 | test: /\.(png|jpg|gif)$/,
58 | use: [
59 | {
60 | loader: 'url-loader',
61 | options: {
62 | // On development we want to see where the file is coming from, hence we preserve the [path]
63 | name: '[path][name].[ext]?hash=[hash:20]',
64 | limit: 8192
65 | }
66 | }
67 | ]
68 | }
69 | ,
70 | {
71 | // Load all icons
72 | test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
73 | use: [
74 | {
75 | loader: 'file-loader',
76 | }
77 | ]
78 | }
79 | ],
80 | },
81 | plugins: [
82 | new HtmlWebpackPlugin({
83 | template: './index.html',
84 | inject: true
85 | })
86 | ]
87 | };
88 |
--------------------------------------------------------------------------------
/webpack.prod.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | const FaviconsWebpackPlugin = require('favicons-webpack-plugin')
4 | const CleanWebpackPlugin = require('clean-webpack-plugin'); //installed via npm
5 | const HtmlWebpackPlugin = require('html-webpack-plugin');
6 | const MiniCssExtractPlugin = require('mini-css-extract-plugin');
7 | const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
8 |
9 | const buildPath = path.resolve(__dirname, 'dist');
10 |
11 | module.exports = {
12 | devtool: 'source-map',
13 | entry: './src/index.js',
14 | output: {
15 | filename: '[name].[hash:20].js',
16 | path: buildPath
17 | },
18 | node: {
19 | fs: 'empty'
20 | },
21 | module: {
22 | rules: [
23 | {
24 | test: /\.js$/,
25 | exclude: /node_modules/,
26 | loader: 'babel-loader',
27 |
28 | options: {
29 | presets: ['env']
30 | }
31 | },
32 | {
33 | test: /\.(scss|css|sass)$/,
34 | use: [
35 | {
36 | loader: MiniCssExtractPlugin.loader
37 | },
38 | {
39 | // translates CSS into CommonJS
40 | loader: 'css-loader',
41 | options: {
42 | sourceMap: true
43 | }
44 | },
45 | {
46 | // Runs compiled CSS through postcss for vendor prefixing
47 | loader: 'postcss-loader',
48 | options: {
49 | sourceMap: true
50 | }
51 | },
52 | {
53 | // compiles Sass to CSS
54 | loader: 'sass-loader',
55 | options: {
56 | outputStyle: 'expanded',
57 | sourceMap: true,
58 | sourceMapContents: true
59 | }
60 | }
61 | ]
62 | },
63 | {
64 | // Load all images as base64 encoding if they are smaller than 8192 bytes
65 | test: /\.(png|jpg|gif)$/,
66 | use: [
67 | {
68 | loader: 'url-loader',
69 | options: {
70 | name: '[name].[hash:20].[ext]',
71 | limit: 8192
72 | }
73 | }
74 | ]
75 | }
76 | ,
77 | {
78 | // Load all icons
79 | test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
80 | use: [
81 | {
82 | loader: 'file-loader',
83 | }
84 | ]
85 | }
86 | ]
87 | },
88 | plugins: [
89 | new HtmlWebpackPlugin({
90 | template: './index.html',
91 | // Inject the js bundle at the end of the body of the given template
92 | inject: 'body',
93 | }),
94 | new CleanWebpackPlugin(buildPath),
95 | new FaviconsWebpackPlugin({
96 | // Your source logo
97 | logo: './src/assets/icon.png',
98 | // The prefix for all image files (might be a folder or a name)
99 | prefix: 'icons-[hash]/',
100 | // Generate a cache file with control hashes and
101 | // don't rebuild the favicons until those hashes change
102 | persistentCache: true,
103 | // Inject the html into the html-webpack-plugin
104 | inject: true,
105 | // favicon background color (see https://github.com/haydenbleasel/favicons#usage)
106 | background: '#fff',
107 | // favicon app title (see https://github.com/haydenbleasel/favicons#usage)
108 | title: '{{projectName}}',
109 |
110 | // which icons should be generated (see https://github.com/haydenbleasel/favicons#usage)
111 | icons: {
112 | android: true,
113 | appleIcon: true,
114 | appleStartup: true,
115 | coast: false,
116 | favicons: true,
117 | firefox: true,
118 | opengraph: false,
119 | twitter: false,
120 | yandex: false,
121 | windows: false
122 | }
123 | }),
124 | new MiniCssExtractPlugin({
125 | filename: 'styles.[contenthash].css'
126 | }),
127 | new OptimizeCssAssetsPlugin({
128 | cssProcessor: require('cssnano'),
129 | cssProcessorOptions: {
130 | map: {
131 | inline: false,
132 | },
133 | discardComments: {
134 | removeAll: true
135 | },
136 | discardUnused: false
137 | },
138 | canPrint: true
139 | })
140 | ]
141 | };
142 |
--------------------------------------------------------------------------------