# Webpack This library is built with some dynamic logic to determine if it is invoked in a script tag or in nodejs. Webpack does not understand those feature tests, so by default it will do some strange things. ## Basic Usage `webpack.app.js` demonstrates bundling an entire app script in a bundle. For basic projects requiring the module from the npm package, it is sufficient to suppress the node shims: ```js /* webpack config for app.out.js */ { /* entry point app.js */ entry: './app.js', /* write to app.out.js */ output: { path:__dirname, filename: './app.out.js' }, /* suppress node shims */ node: { process: false, Buffer: false } } ``` ## Suppressing the Node shims The library properly guards against accidental leakage of node features in the browser but webpack disregards those. The config should explicitly suppress: ```js node: { process: false, Buffer: false } ``` ## Omitting optional dependencies The `codepage` is needed in certain special cases, including files generated by non-US-English versions of Excel, but may not be needed. To reduce build size, the module can be omitted by aliasing the dependency: ```js resolve: { alias: { "./dist/cpexcel.js": "" } }, ``` Alternatively, bundling the `xlsx.core.min.js` script always omits dependencies. ## Bower and minified versions Webpack may show a message like "This seems to be a pre-built javascript file" when processing minified files (like the default Bower script). The message is harmless. To suppress the message, set `module.noParse` in the webpack config: ```js module: { noParse: [ /xlsx.core.min.js/, /xlsx.full.min.js/ ] } ``` ## Other Demos This demo also attempts to demonstrate bundling of the library as well as the core and full distribution versions. `app.js` is the common app code (it will not be bundled). The individual bundles merely wrap and reflect `XLSX`. The app code uses the bundles with script tag inclusion in the main HTML files. The worker scripts use the bundles with `importScripts` references. | required script | HTML page | entry | worker script | |----------------:|------------:|----------:|----------------:| | main `xlsx` lib | `main.html` | `main.js` | `mainworker.js` | | `xlsx.core.min` | `core.html` | `core.js` | `coreworker.js` | | `xlsx.full.min` | `full.html` | `full.js` | `fullworker.js` | The entry points in the demo merely require and re-export the library: ```js /* main.js */ var XLSX = require('../../'); console.log("it works!"); module.exports = XLSX; ``` The main advantage of reflecting the library is deduplication: the library code is only downloaded once. The basic example builds a separate worker script and eventually ships the library twice. ### Reflecting the XLSX variable This library will not assign to `module.exports` if it is run in the browser. To convince webpack, the demo webpack config sets `output`: ```js output: { libraryTarget: 'var', library: 'XLSX' } ``` [![Analytics](https://ga-beacon.appspot.com/UA-36810333-1/SheetJS/js-xlsx?pixel)](https://github.com/SheetJS/js-xlsx)