neutrino-preset-fabrika

2.1.4 • Public • Published

Fabrika Neutrino preset

neutrino-preset-fabrika is a Neutrino preset for creation of web applications for web platforms.

Features

  • Zero upfront configuration necessary to start developing and building a Svelte web app
  • Modern Babel compilation supporting ES modules, last several major browser versions, async functions, dynamic imports, ES class properties, rest spread operators and automatic polyfills bound to platforms
  • Webpack loaders for importing HTML Svelte components, CSS, images, icons, and fonts
  • Webpack Dev Server during development on "localhost" and local network IP for external devices access
  • Automatic creation of HTML pages, no templating of index.html necessary
  • Hot reloading support
  • Tree-shaking to create smaller bundles
  • Production-optimized bundles with Babili minification, source maps and easy chunking
  • Testing with Jest
  • Source watching for re-running of tests on change
  • Collecting test coverage information and generating report
  • ESlint code analyze
  • Stylelint code analyze

Requirements

  • Node.js v6.9+
  • Neutrino v6

Installation

neutrino-preset-fabrika can be installed from NPM. Make sure neutrino and neutrino-preset-fabrika are development dependencies in your project.

package.json

"devDependencies"{
  "neutrino": "latest",
  "neutrino-preset-fabrika": "latest"
},

And add the new file .neutrinorc.js in the root of the project:

.neutrinorc.js

module.exports = {
  use: [
    'neutrino-preset-fabrika'
  ]
}

Install all you project dependencies by calling

npm install

Project Layout

neutrino-preset-fabrika follows the standard project layout specified by Neutrino. This means that by default all project source code should live in a directory named src in the root of the project. This includes JavaScript files, CSS stylesheets, images, and any other assets that would be available to your compiled project. Only files explicitly imported or lazy loaded to your project will be bundled.

Project test code should live in a directory named test in the root of the project. Test files end in either _test.js or .test.js.

Quick start

Source code

After installing Neutrino and the Fabrika preset, add a new directory named src in the root of the project, with a single JS file named index.js in it. You can mount you application to the document <body>. Edit your src/index.js file with the following:

 
import './main.css'
 
document.body.innerHTML = 'Application started'

You can change this code base to better match your needs.

Tests

You can create also test/index.test.js as an entry point for your test. To run tests against files from your source code, simply import them. Jest framework is used in this preset so your tests will look like this:

import module from '../src/module.js'
 
describe('module', () => {
 it('is truthy', () => {
   expect(module).toBeTruthy();
 });
});

Tasks

Now edit your project's package.json to add commands for starting and building the application:

{
  "scripts": {
    "start": "neutrino start",
    "build": "neutrino build",
    "test": "neutrino test",
    "test:watch": "neutrino test --watch",
    "coverage": "neutrino test --coverage"
  }
}

Start the app.

❯ npm start
✔ Development server running on: http://localhost:3000
✔ Build completed

The application will automatically open in a default browser with a local network IP. The same address may be used on any device that is connected to the same local network. For example it may be useful for mobile versions development.

This preset is compatible with different frameworks. It allows to flexibly setup entry point for different types of projects.

Start with VueJS application

VueJS framework uses .vue files as components. For quick start you can use this sample. You can mount your application to the document <body>. Edit your src/index.js file with the following:

index.js

import Vue from 'vue';
import Body from './body.vue';
 
new Vue({ // eslint-disable-line no-new
  el: 'body',
    render(callback) {
    return callback(Body);
  }
});

body.vue

<script>
  export default {};
</script> 
 
<style src="./common.css" />
 
<template>
  <body>
    Application started
  </body>
</template>
 

You can change this code base to better match your needs.

Start with Svelte application

Svelte framework uses .html files as components. For quick start you can use this sample. You can mount you application to the document <body>. Edit your src/index.js file with the following:

index.js

import Body from './body.html'
import './main.css'
 
new Body({ // eslint-disable-line no-new
  target: document.body
})

body.html

<div>Application started</div>
 
<style></style>
 
<script>
  export default {};
</script> 

You can change this code base to better match your needs.

Building

neutrino-preset-fabrika builds static assets to the build directory by default when build command is run.

❯ npm run build

You can either serve or deploy the contents of this build directory as a static site.

Static assets

If you wish to copy files to the build directory that are not imported from application code, you can place them in a directory within src called static. All files in this directory will be copied from src/static to build/static.

Testing

❯ npm test
 
 PASS  test/index.test.js
  module
    ✓ is truthy (2ms)
 
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.972s
Ran all test suites.

Executing single tests

By default this preset will execute every test file located in your test directory ending in the appropriate file extension.

Watching for changes

neutrino-preset-jest can watch for changes on your source directory and subsequently re-run tests. Simply run command:

❯ npm test:watch

Coverage reporting

Jest has an integrated coverage reporter, which requires no configuration. To collect test coverage information and generate a report:

❯ npm run coverage

Hot Reloading

neutrino-preset-fabrika supports Hot Reloading of files that was changed. Hot Module Replacement is supported only in CSS files and Vue components. Other types of modules will completely reload the page on change.

Using dynamic imports with import() will automatically create split points and hot replace those modules upon modification during development.

Linting

neutrino-preset-fabrika has a built-in support of ESlint and Stylelint. But for highlighting of errors in code editors config files should be created in the project root. The static analyzes will be performed automatically on build and start.

ESLint

To enable ESlint in the code editor install a corresponding editor extension and create .eslintrc.js file in the project root

.eslintrc.js

const { Neutrino } = require('neutrino')
const api = Neutrino()
module.exports = api.call('eslintrc')

Stylelint

To enable Stylelint in the code editor install a corresponding editor extension and create .stylelintrc.js file in the project root

.stylelintrc.js

const { Neutrino } = require('neutrino')
const api = Neutrino()
module.exports = api.call('stylelintrc')

Preset options

You can provide custom options and have them merged with this preset's default options to easily affect how this preset builds. You can modify the preset settings from .neutrinorc.js by overriding with an options object. Use an array pair instead of a string to supply these options in .neutrinorc.js.

The following shows how you can pass an options object to the preset and override its options, showing the defaults:

.neutrinorc.js

module.exports = {
  use: [
    ['neutrino-preset-fabrika', {
      // options related to generating the HTML document
      html: {
        title: `${name} ${version}`,
        mobile: true
      },
 
      // options related to a development server
      server: {
        https: false,
        public: true,
        port: 3000,
        open: true
      },
 
      // supported browsers in a Browser List format
      browsers: [
        'last 3 versions'
      ]
    }]
  ]
};

Example: Enable HTTPS, disable auto-opening of a browser, change the page title, define supported browsers:

.neutrinorc.js

module.exports = {
  use: [
    ['neutrino-preset-svelte', {
      // Example: disable auto open in browser and enable SSL
      server: {
        https: true,
        open: false
      },
 
      // Example: change the page title
      html: {
        title: 'Web App'
      },
 
      // Example: change supported browsers
      browsers: [
        'last 1 version',
        'ie >= 10'
      ]
    }]
  ]
};

Readme

Keywords

none

Package Sidebar

Install

npm i neutrino-preset-fabrika

Weekly Downloads

0

Version

2.1.4

License

GPL-3.0

Last publish

Collaborators

  • constgen