From 09a205c995861f0c0dcb65dec2b20540bfa98f4a Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Wed, 23 Dec 2020 14:48:38 -0500 Subject: [PATCH] fix(nextjs): remove duplicated public folder in dist (#4389) --- packages/next/package.json | 2 ++ .../next/src/builders/build/build.impl.spec.ts | 1 + packages/next/src/builders/build/build.impl.ts | 8 ++++++-- packages/next/src/utils/config.ts | 14 +------------- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/next/package.json b/packages/next/package.json index e5f81924c3..e249a3c95c 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -39,6 +39,8 @@ "@angular-devkit/schematics": "~11.0.1", "@svgr/webpack": "^5.4.0", "chalk": "4.1.0", + "copy-webpack-plugin": "6.0.3", + "fs-extra": "7.0.1", "url-loader": "^3.0.0" } } diff --git a/packages/next/src/builders/build/build.impl.spec.ts b/packages/next/src/builders/build/build.impl.spec.ts index 0e37b55ca0..c03b2c62dd 100644 --- a/packages/next/src/builders/build/build.impl.spec.ts +++ b/packages/next/src/builders/build/build.impl.spec.ts @@ -4,6 +4,7 @@ import { getMockContext } from '../../utils/testing'; import { NextBuildBuilderOptions } from '../../utils/types'; import { run } from './build.impl'; +jest.mock('fs-extra'); jest.mock('next/dist/build'); jest.mock('./lib/create-package-json', () => { return { diff --git a/packages/next/src/builders/build/build.impl.ts b/packages/next/src/builders/build/build.impl.ts index c1a3b526b2..4a3b5f0c97 100644 --- a/packages/next/src/builders/build/build.impl.ts +++ b/packages/next/src/builders/build/build.impl.ts @@ -6,13 +6,14 @@ import { import build from 'next/dist/build'; import { PHASE_PRODUCTION_BUILD } from 'next/dist/next-server/lib/constants'; import * as path from 'path'; -import { copyFileSync } from 'fs'; +import { copySync } from 'fs-extra'; import { from, Observable } from 'rxjs'; -import { concatMap, map } from 'rxjs/operators'; +import { concatMap, map, tap } from 'rxjs/operators'; import { prepareConfig } from '../../utils/config'; import { NextBuildBuilderOptions } from '../../utils/types'; import { createPackageJson } from './lib/create-package-json'; import { createNextConfigFile } from './lib/create-next-config-file'; +import { join } from 'path'; try { require('dotenv').config(); @@ -29,6 +30,9 @@ export function run( return from(build(root, config as any)).pipe( concatMap(() => from(createPackageJson(options, context))), concatMap(() => from(createNextConfigFile(options, context))), + tap(() => { + copySync(join(root, 'public'), join(options.outputPath, 'public')); + }), map(() => ({ success: true })) ); } diff --git a/packages/next/src/utils/config.ts b/packages/next/src/utils/config.ts index b96d45a2d7..6af78c9b11 100644 --- a/packages/next/src/utils/config.ts +++ b/packages/next/src/utils/config.ts @@ -10,7 +10,7 @@ import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; import { Configuration } from 'webpack'; import { FileReplacement, NextBuildBuilderOptions } from './types'; import { BuilderContext } from '@angular-devkit/architect'; -import { createCopyPlugin } from '@nrwl/web/src/utils/config'; +import * as CopyWebpackPlugin from 'copy-webpack-plugin'; import { offsetFromRoot } from '@nrwl/devkit'; export function createWebpackConfig( @@ -82,18 +82,6 @@ export function createWebpackConfig( } ); - config.plugins.push( - createCopyPlugin([ - { - input: 'public', - // distDir is `dist/apps/[name]/.next` and we want public to be copied - // to `dist/apps/[name]/public` thus the `..` here. - output: '../public', - glob: '**/*', - }, - ]) - ); - return config; }; }