使用 Neutrino 快速启动现代 JavaScript 开发

Neutrino 是一款工具,它将现代 JavaScript 工具链的最佳部分与零配置的易用性结合在一起。开始 JavaScript 开发的冒险可能很令人生畏。

使用最新的工具和尖端的库很有趣,但通常在坐下来编写应用程序之前会产生大量的设置开销。面对分析瘫痪是一种常见的威胁,完成全面工具管道所需的时间导致了诸如“JavaScript 疲劳”之类的污名。Neutrino 的构建是为了让你快速上手。

Neutrino 将 Webpack 的强大功能与预设的简单性相结合,用于构建 Web 和 Node.js 项目。通过将 Webpack 配置的常见用例封装到可共享的预设中,可以创建应用程序而无需接触任何配置文件。目前,有可用于创建 Web 应用程序、React 应用程序甚至 Node.js 应用程序的预设。添加测试或代码风格检查也只需要一个预设。让我们看看如何快速启动一个 React 应用程序。

React 快速入门

在本指南中,我将使用 Yarn 客户端 来处理依赖项和运行命令。这仅仅是个人喜好;你也可以使用 npm 客户端,如果你愿意。

首先,我们需要一个空间来创建我们的 React 应用程序。在你的终端中,创建一个新目录并进入它

❯ mkdir hacks-react
❯ cd hacks-react

接下来,让我们添加 Neutrino 和用于构建应用程序的 React 预设,以及一些用于实际使用 React 进行开发的其他依赖项

❯ yarn add --dev neutrino neutrino-preset-react
❯ yarn add react react-dom

React 预设有一些约定

  • 源代码位于 src
  • 应用程序的入口点是 src/index.js
  • 你可以将应用程序挂载到 ID 为“root”的元素上

让我们在 src/index.js 中创建入口文件,使用一些简单的内容进行编辑,并渲染它

import React from 'react';
import { render } from 'react-dom';

render(<h1>Hacks: React!</h1>, document.getElementById('root'));

为了运行我们的预览应用程序并构建它,请在你的 package.json 中添加几个脚本

{
  "scripts": {
    "start": "neutrino start --presets neutrino-preset-react",
    "build": "neutrino build --presets neutrino-preset-react"
  },
  "devDependencies": {
    "neutrino": "^4.0.0",
    "neutrino-preset-react": "^4.0.0"
  },
  "dependencies": {
    "react": "^15.4.2",
    "react-dom": "^15.4.2",
    "react-hot-loader": "next"
  }
}

运行命令在你的控制台中启动它,并打开给定的 URL

❯ yarn start

✔ Development server running on: http://localhost:5000
✔ Build completed

Screen Shot 2017-02-17 at 12.55.05 AM

不到 5 分钟,我们就有了 React 应用程序的工作起点!更重要的是,我们的 Neutrino 预设开箱即用,包含了相当多的功能

  • 无需任何配置即可开始开发和构建 React Web 应用程序。
  • 现代 Babel 编译,添加 JSX、ES 模块、最近 2 个主要浏览器版本、异步函数以及对象剩余展开语法。
  • 支持 React 热加载器和热模块替换。
  • 扩展自 neutrino-preset-web
  • Webpack 加载器,用于直接从 JavaScript 导入 HTML、CSS、图像、图标和字体。
  • 开发期间的 Webpack Dev Server。
  • 自动创建静态 HTML 页面,无需模板。
  • 使用 Babili 压缩 和轻松的代码拆分,进行生产优化后的捆绑包。
  • 易于扩展以根据需要自定义你的项目,无需黑盒或弹出。

代码质量

添加代码风格检查同样容易。让我们以 Airbnb 风格指南 为例。通过添加 Airbnb 预设,我们可以根据 Airbnb 风格指南检查我们的源代码

❯ yarn add --dev neutrino-preset-airbnb-base

现在让我们将我们的预设添加到我们的 Neutrino 命令中,但让我们将其移动到“presets”中,而不是“scripts”,这样它就不会那么笨拙,而且我们可以减少重复。此外,Airbnb 预设需要在我们的构建预设之前加载

{
  "config": {
    "presets": [
      "neutrino-preset-airbnb-base",
      "neutrino-preset-react"
    ]
  },
  "scripts": {
    "start": "neutrino start",
    "build": "neutrino build"
  }
}

如果我们再次启动应用程序,但这次引入了一些违反 Airbnb 风格指南的内容,我们可以在控制台中看到问题

❯ yarn start

✔ Development server running on: http://localhost:5000
✔ Build completed

ERROR in ./src/index.js

/Users/eli/code/hacks-react/src/index.js
  5:13  error  Strings must use singlequote  quotes

✖ 1 problem (1 error, 0 warnings)

保持你的代码质量高就像添加预设和遵循约定一样简单。你可以遵循相同的指南将测试添加到项目中。只需选择一个测试预设,你就可以开始了。

强大的力量...

可能有一天,构建过程中的某些内容需要更改以支持你的特定用例。幸运的是,自定义和覆盖构建过程非常简单。Neutrino 不会强迫你在需要更改时维护整个构建配置,也不会将所有依赖项弹出到你的项目中。每个 Neutrino 预设都有明确定义的机制,可以使用最少但直观的 API 增强构建。创建你自己的预设也是统一多个项目中的配置并减少重复常见更改的好方法。只需发布到 npm 或 GitHub,添加为另一个依赖项,然后继续开发。

我们的动机

我们创建 Neutrino 是为了解决我们在 Mozilla 发布和生产组织内部的多个团队中创建前端应用程序时遇到的问题。Neutrino 目前被多个 Mozilla 项目使用,包括 TaskClusterTreeherder 和统一日志查看器。我们维护和支持 Neutrino,因为它是我们自己需要的和使用的,我们希望所有使用它的人也能从中受益。

继续前进,创造吧

通过将强大的工具整合在一起,Neutrino 及其预设为快速开发创造了一个环境,同时消除了编写应用程序过程中的一些障碍。我鼓励你阅读全面的 Neutrino 文档 并在你的下一个项目中尝试使用它。所有源代码均采用 MPL v2 许可,可在 GitHub 上获取。尽情享受吧!

关于 Eli Perelman

更多 Eli Perelman 的文章...


14 条评论

  1. bat

    谢谢!我不明白与市面上所有样板项目或像 create-react-app 这样的元包相比,它的额外价值是什么...

    2017 年 2 月 23 日 下午 2:32

    1. Eli Perelman

      样板和元包的激增是我们试图减少的一件事。这些类型的项目很棒,并且确实有其用途。但是,如果你想对所有项目进行配置更改怎么办?你必须在许多地方进行配置更改,包括原始样板,而预设则让你能够将这些更改限制在单个包中。这些项目中的一些还权衡了易于设置和将配置黑盒化。一旦你决定进行配置更改,你将被迫永远维护整个配置及其依赖项。我们认为 Neutrino 在易于设置和未来的可扩展性之间取得了良好的平衡。

      https://neutrino.js.org/presets/#why-not-a-boilerplate-or-alternative

      2017 年 2 月 23 日 下午 2:48

      1. bat

        感谢你的详细解答。
        你回答了维护具有特定需求的大型项目的 webpack 构建过程的明显痛点。
        但它并没有像标题中所说的那样真正解决快速启动应用程序的问题。

        2017 年 2 月 23 日 下午 6:02

        1. Eli Perelman

          我理解你的意思。Neutrino 的提议不是为了迎合大型应用程序或小型应用程序,而是提供渐进式体验。当我说“快速启动应用程序”时,我指的是减少阻碍许多人实际编写项目的前期疲劳和障碍。在几分钟内,你就可以从无到有地编写实际的应用程序代码。

          你可能不需要一开始就进行所有复杂的配置自定义。这就是为什么存在许多预设;让你快速上手。这样做几次,也许在将来你想进行更改;Neutrino 可以帮助你。在多个项目中进行足够多的更改,Neutrino 也可以帮助你创建自定义预设。

          我觉得我们已经涵盖了让各种规模的应用程序快速启动所需的大部分内容。希望这能澄清我的意思。谢谢,祝你好运!

          2017 年 2 月 23 日 下午 8:02

  2. Philip Mander

    我真的很喜欢这个。它似乎是 Web 构建工具和样板超越的自然演变。我希望它能够在 Web 开发中无处不在。

    一个问题是,许多人会将其视为另一个样板工具,为此,我认为这篇文章的标题没有体现 Neutrino 的价值。

    2017 年 2 月 24 日 上午 5:24

    1. Eli Perelman

      谢谢,是的,这听起来像是关于它与样板对比的故事没有很好地定义。我们将很快更新文档以解决这个问题。

      2017 年 2 月 24 日 上午 10:03

  3. Jorge Antunes

    这是一个非常激动人心的公告!我正在为 webpack 2 升级 dev-toolkit[1],但看看这个项目和 webpack-chain,据我所知,似乎我可以将 dev-toolkit 简化为一个预设!最棒的是,它允许人们除了预设之外,还能获得所需的所有灵活性。

    干得好,伙计们 <3

    [1] https://github.com/stoikerty/dev-toolkit

    2017 年 2 月 24 日 上午 9:27

    1. Eli Perelman

      谢谢!除了你的预设之外,如果你发现所有 React 预设用户都能从中受益的最佳实践,我们很乐意看到它们也被添加到核心预设中。我们很乐意接收你可能有的任何贡献!

      2017 年 2 月 24 日 上午 10:04

  4. KZ

    可访问性怎么样?(WCAG…)

    Mozilla 宣言
    5. 个人必须能够塑造自己在互联网上的体验。

    2017 年 2 月 26 日 上午 1:15

    1. Eli Perelman

      实现无障碍功能属于应用程序特定代码的一部分,Neutrino 不会阻止这方面的工作,也不会阻止您创建无障碍体验。

      2017 年 2 月 26 日 下午 07:27

  5. Alexander

    错误
    class Neutrino extends EventEmitter {
    ^^^^^

    SyntaxError: 块级声明 (let、const、function、class) 在严格模式之外尚不支持
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:374:25)
    at Object.Module._extensions..js (module.js:405:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object. (/Users/aodell/dev/hacks-react/node_modules/neutrino/bin/neutrino:3:18)
    at Module._compile (module.js:398:26)
    at Object.Module._extensions..js (module.js:405:10)

    我尝试使用 NPM 而不是 YARN

    2017 年 3 月 3 日 上午 02:50

    1. Eli Perelman

      Neutrino 需要 Node.js v6.9+。您可以使用 `node –version` 检查您的版本。

      2017 年 3 月 3 日 上午 05:36

  6. Dami

    那么,这与 Yeoman 等工具有什么不同呢?

    2017 年 3 月 10 日 上午 10:10

    1. Eli Perelman

      Yeoman 是一个脚手架和模板生成工具。虽然它可以用来生成您的应用程序所需的所有 Webpack 配置,但这意味着您需要从那时起一直维护所有这些配置。然后,您需要在每次启动新项目时重复此过程。有关更多信息,请参阅常见问题解答:https://neutrino.js.org/FAQ

      2017 年 3 月 10 日 上午 10:16

本文的评论已关闭。