No! Primate Mutation!

    zeroconf-redux

    5.10.0 • Public • Published

    zeroconf-redux

    is a React/Redux dev stack, on top of browserify + budo

    NPM version

    Quick start | Usage | Production build | Customization

    UPDATE latest version 5 replaces UglifyJS with TerserJS.

    Quick start

    Just run

    npm install zeroconf-redux --save-dev
    npx zeroconf-redux
    # Yay!

    Your browser will open and you can start coding your awesome React/Redux web app now!

    If it does not exists, a basic index.js file will be created to be used as the entry for your budo dev server.

    Read below for more details and instructions about how to create a package and launch your dev server with an npm start.

    Usage

    If you have no package.json yet, create one now! For instance with npm init or even (for the lazy ones like me :^)

    npm init -y

    Tip: If it is not a package you want to add to the npm registry, you should add the following attribute to your package.json file.

      "private": true,

    Then with npm do

    npm install zeroconf-redux --save-dev

    The following dependencies will be installed:

    On postinstall the following files are created, if they do not exist:

    • .babelrc
    • .browserslistrc
    • .editorconfig

    If you run npx zeroconf-redux commmand, a file index.js is created if it does not exists and development server will start in watch mode, with a default index.html (in memory).

    Let's assume there is an index.html in the same folder as the package.json with a content like the following

    <!DOCTYPE html>
    <html>
      <body>
        <div id="root"></div>
        <script src="bundle.js"></script>
      </body>
    </html>

    Then, adding an npm script to your package.json, to run budo dev server, something like

        "start": "budo ${npm_package_main} --dir . --serve bundle.js --open --live --pushstate -- -t babelify",

    where:

    • --dir .: serves current folder content statically.
    • --serve bundle.js: set the name of JS bundle produced by browserify.
    • --open: opens default browser on start.
    • --live: enables livereload.
    • --pushstate: needed if you added react-router.

    See budo cli docs for more details.

    Your index.js should look something like

    import React from 'react'
    import ReactDOM from 'react-dom'
    
    ReactDOM.render(
      <div>
        You can start coding <em>index.js</em> file.
      </div>,
      document.getElementById('root')
    )

    Now, running npm start it will

    1. Build your code using index.js as entry.
    2. Open your index.html in your browser.
    3. Start watching HTML, JS and CSS files, with livereload on changes.

    In the examples/counter folder there is a copy of the classic Redux counter example. You can run it with this command

    npm explore zeroconf-redux npm run example_counter

    Production build

    Following instructions from official React documentation, suppose your package main attribute points to your entry file, for instance index.js, and your bundle file is dist/NAME.min.js, where NAME is your package name, you could add an npm script like the following

        "browserify": "cross-env NODE_ENV=production browserify ${npm_package_main} -t babelify -g [ envify --NODE_ENV production ] -g uglifyify | terser --compress --mangle > dist/${npm_package_name}.min.js",

    Unfortunately at the time of this writing, this may not work on Windows: the environment variables npm_package_main and npm_package_name could be undefined if you launch some npm script from an MSDOS prompt, 'cause npm expects it is running in a bash environment. Hence you need to hardcode file paths if you need cross platform compatibility.

    Customization

    src folder

    You may want to organize your code into a src/ folder, if so, do

    mkdir src
    mv index.js src/

    Then edit your package.json

      "main": "src/index.js"

    For sure it is also a good idea to create a src/components/ folder and a Root.js implementing your <Root /> component. By the way, I like to start almost from scratch with the structure I feel more inspiring for that project. For example; if hosted on Heroku I create a public/ folder; if hosted on AWS I like more a bucket/ or (in some cases) buckets/ folder. Programming is a creative process, you know.

    Babel preset env

    Default .babelrc created on postinstall is the following.

    {
      "plugins": [
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-proposal-object-rest-spread"
      ],
      "presets": [
        [
          "@babel/preset-env",
          {
            "corejs": 3,
            "useBuiltIns": "entry"
          }
        ],
        "@babel/preset-react"
      ]
    }

    You may want to customize it, for more details see @babel/preset-env.

    Browserslist

    Default .browserslistrc created on postinstall is the following.

    > 0.5%
    last 2 versions
    Firefox ESR
    not dead
    

    You may want to edit target browsers, for more details see browserslist.

    Linter

    It is strongly recommended to lint your code. Do not think it too much, just launch

    npm install babel-eslint pre-commit standard --save-dev

    and add the following to your package.json

      "scripts": {
        "lint": "standard"
      },
      "pre-commit": [
        "lint"
      ],
      "standard": {
        "parser": "babel-eslint"
      },

    Now on every commit, you will check the code with standard linter. If you like semicolons you can go for semistandard.

    If you are using React hooks you will need also eslint-plugin-react-hooks, so you need to use standardx linter. Same instructions as above, but substitute standard with standardx, then for example add the following to your package.json

      "eslintConfig": {
        "plugins": [
          "react-hooks"
        ],
        "rules": {
          "react-hooks/rules-of-hooks": "error",
          "react-hooks/exhaustive-deps": "warn"
        }
      },

    TypeScript

    You can use Babel and TypeScript together, I could achieve it in my side project GoSeven. It was tricky but it is worth to use typings and browserslist queries together.

    Install additional dependencies

    npm install typescript tsify @babel/preset-typescript @types/react @types/react-dom

    and edit your .babelrc presets

    {
      "plugins": [
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-proposal-object-rest-spread"
      ],
      "presets": [
        [
          "@babel/preset-env",
          {
            "corejs": 3,
            "useBuiltIns": "entry"
          }
        ],
    +   "@babel/preset-typescript",
        "@babel/preset-react"
      ]
    }

    Then modify your package.json, notice that -p tsify and -t babelify options order matters.

    -    "start": "budo ${npm_package_main} --dir . --serve bundle.js --open --live --pushstate -- -t babelify",
    +    "start": "budo ${npm_package_main} --dir . --serve bundle.js --open --live --pushstate -- -p tsify -t babelify",

    License

    MIT

    Install

    npm i zeroconf-redux

    DownloadsWeekly Downloads

    77

    Version

    5.10.0

    License

    MIT

    Unpacked Size

    18.1 kB

    Total Files

    15

    Last publish

    Collaborators

    • fibo