2.0.2 • Published 3 years ago

encoding-plugin v2.0.2

Weekly downloads
11
License
MIT
Repository
github
Last release
3 years ago

Webpack Encoding Plugin

codecov npm

Take control over the encoding of emitted webpack assets. This can be useful, if the delivering webserver enforces a specific content-type, so that your code is not interpreted as utf-8 by the browser.

ℹ️ EncodingPlugin v2 only works with Webpack 5 and above. Use v1 for Webpack <= 4.

Getting Started

Install package:

$ yarn add --dev encoding-plugin

Add the plugin to your webpack config. For example:

const EncodingPlugin = require('encoding-plugin');

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
    }),
  ],
};

Options

NameTypeDefaultDescription
encoding{String}undefinedTarget encoding
test{String\|RegExp\|Array<String\|RegExp>}/(\.js|\.css)(\?.*)?$/iInclude all assets that pass test assertion
include{String\|RegExp\|Array<String\|RegExp>}undefinedInclude all assets matching any of these conditions
exclude{String\|RegExp\|Array<String\|RegExp>}undefinedExclude all assets matching any of these conditions
filename{String\|Function}undefinedThe target asset filename
patchWebpackBootstrap{Boolean}trueWhether to replace utf-8 to target encoding from webpack runtime code or not

encoding

Type: String Default: undefined

The Plugin uses iconv-lite to handle the encoding. A list of supported encodings can be found here

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
    }),
  ],
};

test

Type: String|RegExp|Array<String|RegExp> Default: /(\.js|\.css)(\?.*)?$/i

Include all assets that pass test assertion.

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
      test: /\.js(\?.*)?$/i,
    }),
  ],
};

include

Type: String|RegExp|Array<String|RegExp> Default: undefined

Include all assets matching any of these conditions.

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
      include: /\/includes/,
    }),
  ],
};

exclude

Type: String|RegExp|Array<String|RegExp> Default: undefined

Exclude all assets matching any of these conditions.

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
      exclude: /\/excludes/,
    }),
  ],
};

filename

Type: String|Function Default: undefined

The target asset filename.

String

For example we have assets/scripts/main.js?foo=bar#hash:

[path] is replaced with the directories to the original asset, included trailing / (assets/scripts/).

[file] is replaced with the path of original asset (assets/scripts/main.js).

[base] is replaced with the base ([name] + [ext]) of the original asset (main.js).

[name] is replaced with the name of the original asset (main).

[ext] is replaced with the extension of the original asset, included . (.js).

[query] is replaced with the query of the original asset, included ? (?foo=bar).

[fragment] is replaced with the fragment (in the concept of URL it is called hash) of the original asset (#hash).

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
      filename: "[path][name].iso-8859-1[ext]",
    }),
  ],
};

Function

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
      filename(pathData) {
        // The `pathData` argument contains all placeholders - `path`/`name`/`ext`/etc
        // Available properties described above, for the `String` notation
        if (/\.css$/.test(pathData.file)) {
          return "assets/stylesheets/[path][name].iso-8859-1[ext]";
        }

        return "assets/scripts/[path][name].iso-8859-1[ext]";
      },
    }),
  ],
};

patchWebpackBootstrap

Type: Boolean Default: true

Whether to replace utf-8 to target encoding from webpack runtime code or not.

webpack.config.js

module.exports = {
  plugins: [
    new EncodingPlugin({
      encoding: 'iso-8859-1',
      patchWebpackBootstrap: true,
    }),
  ],
};

Example Webpack runtime code:

patchWebpackBootstrap: false

/******/ 				script = document.createElement('script');
/******/ 				script.charset = 'utf-8';
/******/ 				script.timeout = 120;

patchWebpackBootstrap: true

/******/ 				script = document.createElement('script');
/******/ 				script.charset = 'iso-8859-1';
/******/ 				script.timeout = 120;

webpack-dev-server

To use non-utf-8 encoding with webpack-dev-server, you must set the appropriate charset like so:

devServer:  {
   headers: {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/javascript; charset=windows-1251'
   }
   // ...
}

License

MIT

2.0.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.2.0

4 years ago

1.1.3-test

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago