Have ideas to improve npm?Join in the discussion! ¬Ľ

    webpack-auto-inject-version

    1.2.2¬†‚Äʬ†Public¬†‚Äʬ†Published

    Auto inject version - Webpack plugin

    Adds version from package.json into every single file as top comment block.

    Install

    $ npm install webpack-auto-inject-version --save-dev

    Table of Contents

    What it does
    How to use
    Available options
    Output examples How to use with other webpack plugins
    Change log

    What it does

    Auto Inject Version (AIV) can:

    • inject version from package.json into every bundle file as a comment ( at the top )
    • inject version from package.json into any place in your HTML by special tag [AIV]{version}[/AIV]
    • inject version from package.json into any place in CSS/JS file by special tag [AIV]{version}[/AIV]
    • auto increase package.json version by --env.major, --env.minor, --env.patch passed into webpack

    How to use

    It's easy to set it up, all you need is:

    • use WebpackAutoInject in webpack plugins
    • pass config as a parameter, or leave it blank as all options are "on" by default.

    Simple config example ( in webpack.conf.js )

    var WebpackAutoInject = require('webpack-auto-inject-version');
    ...
    module.exports = {
        ...
        plugins: [
            new WebpackAutoInject({
                // options
                // example:
                components: {
                    AutoIncreaseVersion: false
                }
            })
        ]
    }

    Full config example ( in webpack.conf.js )

    module.exports = {
        ...
        plugins: [
          new WebpackAutoInject({
            // specify the name of the tag in the outputed files eg
            // bundle.js: [SHORT]  Version: 0.13.36 ...
            SHORT: 'CUSTOM',
            SILENT: false,
            PACKAGE_JSON_PATH: './package.json',
            PACKAGE_JSON_INDENT: 4,
            components: {
              AutoIncreaseVersion: true,
              InjectAsComment: true,
              InjectByTag: true
            },
            componentsOptions: {
              AutoIncreaseVersion: {
                runInWatchMode: false // it will increase version with every single build!
              },
              InjectAsComment: {
                tag: 'Version: {version} - {date}',
                dateFormat: 'h:MM:ss TT', // change timezone: `UTC:h:MM:ss` or `GMT:h:MM:ss`
                multiLineCommentType: false, // use `/** */` instead of `//` as comment block
              },
              InjectByTag: {
                fileRegex: /\.+/,
                // regexp to find [AIV] tag inside html, if you tag contains unallowed characters you can adjust the regex
                // but also you can change [AIV] tag to anything you want
                AIVTagRegexp: /(\[AIV])(([a-zA-Z{} ,:;!()_@\-"'\\\/])+)(\[\/AIV])/g,
                dateFormat: 'h:MM:ss TT'
              }
            },
            LOGS_TEXT: {
              AIS_START: 'DEMO AIV started'
            }
          })
        ]
    }
    

    Inject by tag example

    <body>
      <span>
        [AIV]{version}[/AIV]
      </span>
      <span>
        [AIV]{date}[/AIV]
      </span>
      <span>
        [AIV]{version}_{date}[/AIV]
      </span>
      <span>
        [AIV]V:{version} Date:{date}[/AIV]
      </span>
      <span>
        [AIV]Version {version} , {date}[/AIV]
      </span>
    </body>
    

    Available options

    components.AutoIncreaseVersion

    Auto increase package.json number.
    This option requires extra argument to be sent to webpack build.
    It happens before anything else to make sure that your new version is injected into your files.
    Arguments: --env.major --env.minor --env.patch

    Example for package.json run type, npm run start => ( 1.2.10 to 2.0.0 )

     "version" : "1.2.10",
     "scripts": {
        "start": "webpack --env.major"
     }

    To enable watch mode:

      plugins: [
        new WebpackAutoInject({
          ...
          components: {
            AutoIncreaseVersion: true,
            ...
          },
          componentsOptions: {
            AutoIncreaseVersion: {
              runInWatchMode: false // it will increase version with every single build!
            }
          }
        })
      ]
    

    Default: true

    components.InjectByTag

    Inject version number into your file
    Version will replace the <{version}> tag.

    <span>My awesome project | [AIV]{version}[/AIV]</span>
    var version = '[AIV]{version}[/AIV]';

    Default: true

    components.InjectAsComment

    This will inject your version as a comment into any css,js,html file.
    You can change what is injected into the file by changing componentsOptions.InjectAsComment.tag. Currently only 2 tags are supported:

    • {version}
    • {date} ( current date ) Example:
      ...
      plugins: [
        ...
        new WebpackAutoInject({
          PACKAGE_JSON_PATH: './package.json',
          components: {
            ...
            InjectAsComment: true
          },
          componentsOptions: {
            ...
            InjectAsComment: {
              tag: 'Build version: {version} - {date}', // default
              dateFormat: 'dddd, mmmm dS, yyyy, h:MM:ss TT', // default
              multiLineCommentType: false, // default
            }
        })
      ]

    Default: true

    Output-examples

    AIV can inject version number for all your bundle files (css,js,html).

    // [AIV] Build version: 1.0.10
    /******/ (function(modules) { // webpackBootstrap
    /******/  // The module cache
    /******/  var installedModules = {};



    Example html:

    <!-- [AIV] Build version: 1.0.10 -->
    <!DOCTYPE html>
    <html lang="en">

    How to use with other webpack plugins

    Webpack plugins order matters! Always try to put WebpackAutoInject as a first webpack plugin.

    compression-webpack-plugin

      plugins: [
        new WebpackAutoInject(),
        new CompressionPlugin(),
      ]
    

    uglifyjs-webpack-plugin

      plugins: [
        new WebpackAutoInject(),
        new UglifyJsPlugin(),
      ]
    

    webpack.optimize.UglifyJsPlugin

    If the order won't be enough, you can always add ignore to the uglifyJsPlugin to prevent stripping out AIV comments eg:

      new webpack.optimize.UglifyJsPlugin({
        ...
        output: {
          // prevent version info to be removed from bundle.js
          comments: /\[AIV\]/,
        },
        ...
      });
    

    Change log

    [1.2.2] - 27/10/2018

    • add PACKAGE_JSON_INDENT @trevyn

    [1.2.1] - 27/10/2018

    • security updates

    [1.2.0] - 27/10/2018

    • inject as comment will no more be a version behind with auto increase version
    • inject as comment can now switched to multiline comment type eg /** */
    • added support for npm log levels eg npm start -s will disable console logs
    • unit tests added inside the demo folder, npm run test

    [1.1.0] - 15/03/2018

    • webpack sync apply
    • "name" has been removed as not used anyway, use SHORT instead
    • eslint changes
    • InjectByTag - AIVTagRegexp exposed in config to allow [AIV] tag modifications
    • comma fix in InjectByTag regexp
    • query has on filename has been fixed

    [1.0.0] - 25/08/2017

    • Date format can now be specified for InjectAsComment
    • Date format can now be specified for InjectByTag
    • Webpack WATCH support added
    • Root SILENT option added
    • Minor fixes

    [0.5.14] - 12/04/2017

    • Remove babel polyfills from webpack build as it was causing issues if babel was already used in project

    [0.5.13] - 12/04/2017

    • Tag from InjectAsComment can now be configured by options ( componentsOptions.InjectAsComment.tag )
    • Default tag template for InjectAsComment has change

    [0.5.12] - 12/04/2017

    • Fix dependency missing issue
    • Remove export as object with .default as a class

    Keywords

    none

    Install

    npm i webpack-auto-inject-version

    DownloadsWeekly Downloads

    5,677

    Version

    1.2.2

    License

    ISC

    Unpacked Size

    300 kB

    Total Files

    17

    Last publish

    Collaborators

    • avatar