From 00608b49aa1392785d3d4d13f619a10dbad6a75a Mon Sep 17 00:00:00 2001 From: Benji Date: Thu, 31 May 2018 16:50:52 +0100 Subject: [PATCH 1/3] ignore if path is falsy --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 532c929..5829294 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,7 @@ module.exports = class EmitAllPlugin { } shouldIgnore(path) { - return this.ignorePattern.test(path); + return !path || this.ignorePattern.test(path); } apply(compiler) { From 4ce987ff205eee91d759510ea8030266dea5dbe9 Mon Sep 17 00:00:00 2001 From: Benji Date: Thu, 31 May 2018 17:46:24 +0100 Subject: [PATCH 2/3] add option to transform filenames --- index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 5829294..4641bda 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,8 @@ module.exports = class EmitAllPlugin { constructor(opts = {}) { this.ignorePattern = opts.ignorePattern || /node_modules/; this.path = opts.path; + this.filenameTransform = + opts.filenameTransform || (filename => filename); } shouldIgnore(path) { @@ -26,10 +28,10 @@ module.exports = class EmitAllPlugin { const projectRoot = compiler.context; const out = this.path || compiler.options.output.path; - const dest = path.join( - out, + const relativePath = this.filenameTransform( absolutePath.replace(projectRoot, '') ); + const dest = path.join(out, relativePath); compiler.outputFileSystem.mkdirp( path.dirname(dest), From e1ad54f8d01a9a27b0acbb17e06554362cd5dbb0 Mon Sep 17 00:00:00 2001 From: Benji Date: Tue, 6 Nov 2018 08:03:50 +0000 Subject: [PATCH 3/3] add options to emit at dev time and to do a simple file transform before writing --- index.js | 28 ++++++++++++-- package-lock.json | 94 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 ++- 3 files changed, 123 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 4641bda..5817736 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,15 @@ const path = require('path'); +const MemoryFileSystem = require('memory-fs') +const mkdirp = require('mkdirp'); +const fs = require('fs'); module.exports = class EmitAllPlugin { constructor(opts = {}) { this.ignorePattern = opts.ignorePattern || /node_modules/; this.path = opts.path; - this.filenameTransform = - opts.filenameTransform || (filename => filename); + this.filenameTransform = opts.filenameTransform || (filename => filename); + this.filecontentTransform = opts.filecontentTransform || (contents => contents); + this.emitInDev = opts.emitInDev; } shouldIgnore(path) { @@ -24,7 +28,6 @@ module.exports = class EmitAllPlugin { // Used for vendor chunk if (mod.constructor.name === 'MultiModule') return; - const source = mod._source._value; const projectRoot = compiler.context; const out = this.path || compiler.options.output.path; @@ -33,6 +36,9 @@ module.exports = class EmitAllPlugin { ); const dest = path.join(out, relativePath); + const source = + this.filecontentTransform(mod._source._value, relativePath, absolutePath); + compiler.outputFileSystem.mkdirp( path.dirname(dest), err => { @@ -47,6 +53,22 @@ module.exports = class EmitAllPlugin { ); } ); + if (this.emitInDev && compiler.outputFileSystem instanceof MemoryFileSystem) { + mkdirp( + path.dirname(dest), + err => { + if (err) throw err; + + fs.writeFileSync( + dest, + source, + err => { + if (err) throw err; + } + ); + } + ); + } }); cb(); } diff --git a/package-lock.json b/package-lock.json index 6bbafea..27417d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,6 +95,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -106,6 +112,15 @@ "which": "1.3.0" } }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -215,6 +230,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -265,6 +286,16 @@ "yallist": "2.1.2" } }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -280,6 +311,21 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -372,12 +418,45 @@ } } }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -399,6 +478,15 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -420,6 +508,12 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", diff --git a/package.json b/package.json index 3c49777..b30d9f5 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,11 @@ "node": ">=7", "npm": "*" }, - "dependencies": {}, + "dependencies": { + "mkdirp": "^0.5.1" + }, "devDependencies": { + "memory-fs": "^0.4.1", "prettier": "^1.5.3", "prettier-check": "^1.0.0" },