From d5fbe4b3b6d8458543ba1cfae3885b34a9677fb5 Mon Sep 17 00:00:00 2001 From: SteveSandersonMS Date: Fri, 11 Mar 2016 00:34:57 +0000 Subject: [PATCH] Fix aspnet-webpack package --- .../npm/aspnet-webpack/package.json | 2 +- .../npm/aspnet-webpack/src/DeepClone.ts | 3 --- .../npm/aspnet-webpack/src/LoadViaWebpack.ts | 4 ++-- .../npm/aspnet-webpack/src/RequireNewCopy.ts | 22 +++++++++++++++++++ .../src/WebpackDevMiddleware.ts | 4 ++-- 5 files changed, 27 insertions(+), 8 deletions(-) delete mode 100644 src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/DeepClone.ts create mode 100644 src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/RequireNewCopy.ts diff --git a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/package.json b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/package.json index 8f1afee..ba04386 100644 --- a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/package.json +++ b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/package.json @@ -1,6 +1,6 @@ { "name": "aspnet-webpack", - "version": "1.0.0", + "version": "1.0.1", "description": "Helpers for using Webpack in ASP.NET projects. Works in conjunction with the Microsoft.AspNet.SpaServices NuGet package.", "main": "index.js", "scripts": { diff --git a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/DeepClone.ts b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/DeepClone.ts deleted file mode 100644 index 102b658..0000000 --- a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/DeepClone.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function deepClone(serializableObject: T): T { - return JSON.parse(JSON.stringify(serializableObject)); -} diff --git a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/LoadViaWebpack.ts b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/LoadViaWebpack.ts index c11514f..50300d0 100644 --- a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/LoadViaWebpack.ts +++ b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/LoadViaWebpack.ts @@ -8,7 +8,7 @@ import ExternalsPlugin from 'webpack-externals-plugin'; import requireFromString from 'require-from-string'; import MemoryFS from 'memory-fs'; import * as webpack from 'webpack'; -import { deepClone } from './DeepClone'; +import { requireNewCopy } from './RequireNewCopy'; // Ensure we only go through the compile process once per [config, module] pair const loadViaWebpackPromisesCache: { [key: string]: any } = {}; @@ -32,7 +32,7 @@ export function loadViaWebpack(webpackConfigPath: string, modulePath: string, function loadViaWebpackNoCache(webpackConfigPath: string, modulePath: string) { return new Promise((resolve, reject) => { // Load the Webpack config and make alterations needed for loading the output into Node - const webpackConfig: webpack.Configuration = deepClone(require(webpackConfigPath)); + const webpackConfig: webpack.Configuration = requireNewCopy(webpackConfigPath); webpackConfig.entry = modulePath; webpackConfig.target = 'node'; webpackConfig.output = { path: '/', filename: 'webpack-output.js', libraryTarget: 'commonjs' }; diff --git a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/RequireNewCopy.ts b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/RequireNewCopy.ts new file mode 100644 index 0000000..940c83e --- /dev/null +++ b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/RequireNewCopy.ts @@ -0,0 +1,22 @@ +export function requireNewCopy(moduleNameOrPath: string): any { + // Store a reference to whatever's in the 'require' cache, + // so we don't permanently destroy it, and then ensure there's + // no cache entry for this module + const resolvedModule = require.resolve(moduleNameOrPath); + const wasCached = resolvedModule in require.cache; + let cachedInstance; + if (wasCached) { + cachedInstance = require.cache[resolvedModule]; + delete require.cache[resolvedModule]; + } + + try { + // Return a new copy + return require(resolvedModule); + } finally { + // Restore the cached entry, if any + if (wasCached) { + require.cache[resolvedModule] = cachedInstance; + } + } +} diff --git a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/WebpackDevMiddleware.ts b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/WebpackDevMiddleware.ts index 66f40c4..d15d861 100644 --- a/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/WebpackDevMiddleware.ts +++ b/src/Microsoft.AspNet.SpaServices/npm/aspnet-webpack/src/WebpackDevMiddleware.ts @@ -1,6 +1,6 @@ import * as express from 'express'; import * as webpack from 'webpack'; -import { deepClone } from './DeepClone'; +import { requireNewCopy } from './RequireNewCopy'; export interface CreateDevServerCallback { (error: any, result: { Port: number, PublicPath: string }): void; @@ -20,7 +20,7 @@ interface DevServerOptions { export function createWebpackDevServer(callback: CreateDevServerCallback, optionsJson: string) { const options: CreateDevServerOptions = JSON.parse(optionsJson); - const webpackConfig: webpack.Configuration = deepClone(require(options.webpackConfigPath)); + const webpackConfig: webpack.Configuration = requireNewCopy(options.webpackConfigPath); const publicPath = (webpackConfig.output.publicPath || '').trim(); if (!publicPath) { callback('To use the Webpack dev server, you must specify a value for \'publicPath\' on the \'output\' section of your webpack.config.', null);