This repository has been archived by the owner on Feb 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 213
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
29d867b
commit d7d3c73
Showing
1 changed file
with
158 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
<p align="center"> | ||
<img src="https://github.com/mozilla-neutrino/neutrino/raw/logo/neutrino.png" height="150" /> | ||
</p> | ||
|
||
<p align="center">Create and build modern JavaScript applications with zero initial configuration and minimal fuss.</p> | ||
<p align="center"><a href="https://npmjs.org/package/neutrino"><img src="https://badge.fury.io/js/neutrino.svg"></a> <a href="https://david-dm.org/mozilla-neutrino/neutrino"><img src="https://david-dm.org/mozilla-neutrino/neutrino.svg"></a></p> | ||
--- | ||
|
||
Neutrino is a helper tool which lets you build web and Node.js applications with shared | ||
configurations. It intends to make the process of initializing and building projects much simpler by | ||
providing minimal development dependencies. Neutrino uses Webpack to build both web and Node.js | ||
projects by providing complete build presets which can be shared across targets and projects. You | ||
can use neutrino base presets to get started building a variety of projects, create your own | ||
presets by extending the neutrino code presets to be shared across your own projects or even by the | ||
community. Presets can even be manipulated on a project-by-project basis to handle almost any build | ||
situation your preset doesn't cover. | ||
|
||
--- | ||
|
||
## Features | ||
|
||
- Preset-based Webpack building with development and production support | ||
- Test web projects with Karma + Mocha, and Node.js projects with Mocha | ||
|
||
## Core Presets | ||
|
||
- [Web](https://github.com/mozilla-neutrino/neutrino-preset-web): Build modern, generic web applications | ||
- [Node.js](https://github.com/mozilla-neutrino/neutrino-preset-node): Build modern Node.js applications | ||
- [React](https://github.com/mozilla-neutrino/neutrino-preset-react): Build React-based web applications | ||
|
||
## Requirements | ||
|
||
- v3 (latest): Node.js v4+ and yarn | ||
- v2: Node.js v4+ and npm | ||
|
||
## Getting started | ||
|
||
Neutrino projects require 2 development dependencies: neutrino itself and a build configuration | ||
preset. Neutrino provides core presets for building generic web applications, Node.js, or React | ||
applications. If these presets do not meet your needs, feel free to use a community-provided preset | ||
or extend one of these presets to meet your needs. | ||
|
||
To get started using neutrino in your project, install neutrino and your preset as development | ||
dependencies. In this example, we want to build a React application: | ||
|
||
```sh | ||
npm install --save-dev neutrino neutrino-preset-react | ||
``` | ||
|
||
With neutrino and your preset in place, modify the `scripts` in your package.json to use | ||
neutrino for building the project: | ||
|
||
```json | ||
{ | ||
"scripts": { | ||
"start": "PORT=3000 neutrino start --preset neutrino-preset-react", | ||
"test": "neutrino test --preset neutrino-preset-react", | ||
"build": "neutrino build --preset neutrino-preset-react" | ||
} | ||
} | ||
``` | ||
|
||
By default, neutrino preset look for source code in `src/`, and tests in `test/`. Use your npm | ||
scripts to start building! | ||
|
||
```sh | ||
# Build the application in development mode | ||
yarn start | ||
|
||
# Build the application and run any tests | ||
yarn test | ||
|
||
# Build the application in production mode, outputting content to build/ | ||
yarn run build | ||
``` | ||
|
||
If you plan to use the same preset across all your script targets, you can add a `config` entry to | ||
your package.json to specify this: | ||
|
||
```json | ||
{ | ||
"config": { | ||
"preset": "neutrino-preset-react" | ||
}, | ||
"scripts": { | ||
"start": "PORT=3000 neutrino start", | ||
"test": "neutrino test", | ||
"build": "neutrino build" | ||
} | ||
} | ||
``` | ||
|
||
## Overriding presets | ||
|
||
Neutrino core presets provide a good baseline for developing a few different types of JavaScript | ||
applications by providing configuration for Webpack, ESLint, Karma, and Mocha. If you need to modify | ||
preset configuration, you can `require` the preset in your project and specify a new preset to | ||
neutrino with the changes. | ||
|
||
For example, let's say you have a project using the neutrino `web` preset, but now want to support | ||
building LESS files. Let's create a new custom preset in your project to handle this, e.g. | ||
`custom-preset.js`: | ||
|
||
```js | ||
// require the preset to change | ||
const preset = require('neutrino-preset-web'); | ||
// also a using helper to deep-copy an object | ||
const clone = require('lodash.clonedeep'); | ||
|
||
// Find the preset's CSS loader | ||
const cssLoader = preset.module.loaders.find(l => /css/.test(l.test)); | ||
|
||
// Make a copy of the loader so we can use it for LESS loading, while still keeping normal | ||
// CSS loading | ||
const lessLoader = clone(cssLoader); | ||
|
||
// Change the files the loader uses to .less files | ||
lessLoader.test = /\.less$/; | ||
|
||
// Add the less-loader to this loader which handles LESS compilation | ||
lessLoader.loaders.push(require.resolve('less-loader')); | ||
|
||
// Add the new LESS loader to the preset | ||
preset.module.loaders.push(lessLoader); | ||
|
||
// re-export the modified preset | ||
module.exports = preset; | ||
``` | ||
|
||
Now use your new preset in your package.json scripts: | ||
|
||
```json | ||
{ | ||
"scripts": { | ||
"start": "neutrino start -p custom-preset.js" | ||
} | ||
} | ||
``` | ||
|
||
# Creating shareable presets | ||
|
||
Creating neutrino presets uses the same premise as modifying a preset, but with the addition that | ||
these can be published to npm and used in numerous projects. See the neutrino core presets for | ||
examples on how this is accomplished for tips on creating your own presets. | ||
|
||
## Contribute | ||
|
||
- Issue Tracker: [https://github.com/mozilla-neutrino/neutrino/issues](https://github.com/mozilla-neutrino/neutrino/issues) | ||
- Source Code: [https://github.com/mozilla-neutrino/neutrino](https://github.com/mozilla-neutrino/neutrino) | ||
- Code of Conduct: [Adapted from Rust CoC](https://www.rust-lang.org/conduct.html) | ||
|
||
## Support | ||
|
||
If you are having issues, please let us know. | ||
|
||
## License | ||
|
||
This project is licensed under the [Mozilla Public License v2.0](https://github.com/mozilla-neutrino/neutrino/blob/master/LICENSE) |