mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Don't delete .next
folder before a replacement is built (#1139)
This commit is contained in:
parent
3766cd0013
commit
acc1983f80
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -9,6 +9,7 @@ npm-debug.log
|
|||
|
||||
# other
|
||||
.next
|
||||
.next-*
|
||||
|
||||
# coverage
|
||||
.nyc_output
|
||||
|
@ -17,4 +18,4 @@ coverage
|
|||
# editors
|
||||
.idea/*
|
||||
*.iml
|
||||
*.sublime-*
|
||||
*.sublime-*
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { resolve } from 'path'
|
||||
import del from 'del'
|
||||
|
||||
export default function clean (dir) {
|
||||
return del(resolve(dir, '.next'))
|
||||
export default function clean (dir, folderName = '.next') {
|
||||
return del(resolve(dir, folderName))
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ import path from 'path'
|
|||
import zlib from 'zlib'
|
||||
import glob from 'glob-promise'
|
||||
|
||||
export default async function gzipAssets (dir) {
|
||||
const nextDir = path.resolve(dir, '.next')
|
||||
export default async function gzipAssets (dir, buildFolder = '.next') {
|
||||
const nextDir = path.resolve(dir, buildFolder)
|
||||
|
||||
const coreAssets = [
|
||||
path.join(nextDir, 'commons.js'),
|
||||
|
|
|
@ -4,16 +4,19 @@ import path from 'path'
|
|||
import webpack from './webpack'
|
||||
import clean from './clean'
|
||||
import gzipAssets from './gzip'
|
||||
import replaceCurrentBuild from './replace'
|
||||
|
||||
export default async function build (dir) {
|
||||
const [compiler] = await Promise.all([
|
||||
webpack(dir),
|
||||
clean(dir)
|
||||
])
|
||||
const distFolder = '.next'
|
||||
const buildFolder = `.next-${uuid.v4()}`
|
||||
const compiler = await webpack(dir, buildFolder)
|
||||
|
||||
await runCompiler(compiler)
|
||||
await gzipAssets(dir)
|
||||
await writeBuildId(dir)
|
||||
const oldFolder = await replaceCurrentBuild(dir, buildFolder, distFolder)
|
||||
await gzipAssets(dir, distFolder)
|
||||
await writeBuildId(dir, distFolder)
|
||||
|
||||
clean(dir, oldFolder)
|
||||
}
|
||||
|
||||
function runCompiler (compiler) {
|
||||
|
@ -34,8 +37,8 @@ function runCompiler (compiler) {
|
|||
})
|
||||
}
|
||||
|
||||
async function writeBuildId (dir) {
|
||||
const buildIdPath = path.resolve(dir, '.next', 'BUILD_ID')
|
||||
async function writeBuildId (dir, distFolder) {
|
||||
const buildIdPath = path.resolve(dir, distFolder, 'BUILD_ID')
|
||||
const buildId = uuid.v4()
|
||||
await fs.writeFile(buildIdPath, buildId, 'utf8')
|
||||
}
|
||||
|
|
18
server/build/replace.js
Normal file
18
server/build/replace.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import uuid from 'uuid'
|
||||
|
||||
export default function replaceCurrentBuild (dir, buildFolder, distFolder) {
|
||||
const distDir = path.resolve(dir, distFolder)
|
||||
const buildDir = path.resolve(dir, buildFolder)
|
||||
const oldDir = path.resolve(dir, `.next-${uuid.v4()}`)
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.rename(distDir, oldDir, () => {
|
||||
fs.rename(buildDir, distDir, (err) => {
|
||||
if (err) return reject(err)
|
||||
resolve(oldDir)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
|
@ -23,7 +23,7 @@ const interpolateNames = new Map(defaultPages.map((p) => {
|
|||
return [join(nextPagesDir, p), `dist/pages/${p}`]
|
||||
}))
|
||||
|
||||
export default async function createCompiler (dir, { dev = false, quiet = false } = {}) {
|
||||
export default async function createCompiler (dir, buildFolder, { dev = false, quiet = false } = {}) {
|
||||
dir = resolve(dir)
|
||||
const config = getConfig(dir)
|
||||
const defaultEntries = dev
|
||||
|
@ -228,7 +228,7 @@ export default async function createCompiler (dir, { dev = false, quiet = false
|
|||
context: dir,
|
||||
entry,
|
||||
output: {
|
||||
path: join(dir, '.next'),
|
||||
path: join(dir, buildFolder || '.next'),
|
||||
filename: '[name]',
|
||||
libraryTarget: 'commonjs2',
|
||||
publicPath: '/_webpack/',
|
||||
|
|
|
@ -35,7 +35,7 @@ export default class HotReloader {
|
|||
|
||||
async start () {
|
||||
const [compiler] = await Promise.all([
|
||||
webpack(this.dir, { dev: true, quiet: this.quiet }),
|
||||
webpack(this.dir, null, { dev: true, quiet: this.quiet }),
|
||||
clean(this.dir)
|
||||
])
|
||||
|
||||
|
|
Loading…
Reference in a new issue