mirror of
https://github.com/aspnet/JavaScriptServices.git
synced 2025-12-23 01:58:29 +00:00
Fix aspnet-webpack package
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "aspnet-webpack",
|
"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.",
|
"description": "Helpers for using Webpack in ASP.NET projects. Works in conjunction with the Microsoft.AspNet.SpaServices NuGet package.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
export function deepClone<T>(serializableObject: T): T {
|
|
||||||
return JSON.parse(JSON.stringify(serializableObject));
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,7 @@ import ExternalsPlugin from 'webpack-externals-plugin';
|
|||||||
import requireFromString from 'require-from-string';
|
import requireFromString from 'require-from-string';
|
||||||
import MemoryFS from 'memory-fs';
|
import MemoryFS from 'memory-fs';
|
||||||
import * as webpack from 'webpack';
|
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
|
// Ensure we only go through the compile process once per [config, module] pair
|
||||||
const loadViaWebpackPromisesCache: { [key: string]: any } = {};
|
const loadViaWebpackPromisesCache: { [key: string]: any } = {};
|
||||||
@@ -32,7 +32,7 @@ export function loadViaWebpack<T>(webpackConfigPath: string, modulePath: string,
|
|||||||
function loadViaWebpackNoCache<T>(webpackConfigPath: string, modulePath: string) {
|
function loadViaWebpackNoCache<T>(webpackConfigPath: string, modulePath: string) {
|
||||||
return new Promise<T>((resolve, reject) => {
|
return new Promise<T>((resolve, reject) => {
|
||||||
// Load the Webpack config and make alterations needed for loading the output into Node
|
// 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.entry = modulePath;
|
||||||
webpackConfig.target = 'node';
|
webpackConfig.target = 'node';
|
||||||
webpackConfig.output = { path: '/', filename: 'webpack-output.js', libraryTarget: 'commonjs' };
|
webpackConfig.output = { path: '/', filename: 'webpack-output.js', libraryTarget: 'commonjs' };
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as express from 'express';
|
import * as express from 'express';
|
||||||
import * as webpack from 'webpack';
|
import * as webpack from 'webpack';
|
||||||
import { deepClone } from './DeepClone';
|
import { requireNewCopy } from './RequireNewCopy';
|
||||||
|
|
||||||
export interface CreateDevServerCallback {
|
export interface CreateDevServerCallback {
|
||||||
(error: any, result: { Port: number, PublicPath: string }): void;
|
(error: any, result: { Port: number, PublicPath: string }): void;
|
||||||
@@ -20,7 +20,7 @@ interface DevServerOptions {
|
|||||||
|
|
||||||
export function createWebpackDevServer(callback: CreateDevServerCallback, optionsJson: string) {
|
export function createWebpackDevServer(callback: CreateDevServerCallback, optionsJson: string) {
|
||||||
const options: CreateDevServerOptions = JSON.parse(optionsJson);
|
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();
|
const publicPath = (webpackConfig.output.publicPath || '').trim();
|
||||||
if (!publicPath) {
|
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);
|
callback('To use the Webpack dev server, you must specify a value for \'publicPath\' on the \'output\' section of your webpack.config.', null);
|
||||||
|
|||||||
Reference in New Issue
Block a user