mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Move plugins and loaders to webpack folder (#4618)
Also adds basic `flow` to webpack.js and the plugins.
This commit is contained in:
parent
82f2e08eab
commit
d674dcc426
|
@ -1,3 +1,5 @@
|
||||||
|
// @flow
|
||||||
|
import type {NextConfig} from '../server/config'
|
||||||
import path, {sep} from 'path'
|
import path, {sep} from 'path'
|
||||||
import webpack from 'webpack'
|
import webpack from 'webpack'
|
||||||
import resolve from 'resolve'
|
import resolve from 'resolve'
|
||||||
|
@ -6,12 +8,12 @@ import CaseSensitivePathPlugin from 'case-sensitive-paths-webpack-plugin'
|
||||||
import WriteFilePlugin from 'write-file-webpack-plugin'
|
import WriteFilePlugin from 'write-file-webpack-plugin'
|
||||||
import FriendlyErrorsWebpackPlugin from 'friendly-errors-webpack-plugin'
|
import FriendlyErrorsWebpackPlugin from 'friendly-errors-webpack-plugin'
|
||||||
import {getPages} from './webpack/utils'
|
import {getPages} from './webpack/utils'
|
||||||
import PagesPlugin from './plugins/pages-plugin'
|
import PagesPlugin from './webpack/plugins/pages-plugin'
|
||||||
import NextJsSsrImportPlugin from './plugins/nextjs-ssr-import'
|
import NextJsSsrImportPlugin from './webpack/plugins/nextjs-ssr-import'
|
||||||
import DynamicChunksPlugin from './plugins/dynamic-chunks-plugin'
|
import DynamicChunksPlugin from './webpack/plugins/dynamic-chunks-plugin'
|
||||||
import UnlinkFilePlugin from './plugins/unlink-file-plugin'
|
import UnlinkFilePlugin from './webpack/plugins/unlink-file-plugin'
|
||||||
import PagesManifestPlugin from './plugins/pages-manifest-plugin'
|
import PagesManifestPlugin from './webpack/plugins/pages-manifest-plugin'
|
||||||
import BuildManifestPlugin from './plugins/build-manifest-plugin'
|
import BuildManifestPlugin from './webpack/plugins/build-manifest-plugin'
|
||||||
import {SERVER_DIRECTORY, NEXT_PROJECT_ROOT, NEXT_PROJECT_ROOT_NODE_MODULES, NEXT_PROJECT_ROOT_DIST, DEFAULT_PAGES_DIR} from '../lib/constants'
|
import {SERVER_DIRECTORY, NEXT_PROJECT_ROOT, NEXT_PROJECT_ROOT_NODE_MODULES, NEXT_PROJECT_ROOT_DIST, DEFAULT_PAGES_DIR} from '../lib/constants'
|
||||||
|
|
||||||
function externalsConfig (dir, isServer) {
|
function externalsConfig (dir, isServer) {
|
||||||
|
@ -48,7 +50,14 @@ function externalsConfig (dir, isServer) {
|
||||||
return externals
|
return externals
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function getBaseWebpackConfig (dir, {dev = false, isServer = false, buildId, config}) {
|
type BaseConfigContext = {|
|
||||||
|
dev: boolean,
|
||||||
|
isServer: boolean,
|
||||||
|
buildId: string,
|
||||||
|
config: NextConfig
|
||||||
|
|}
|
||||||
|
|
||||||
|
export default async function getBaseWebpackConfig (dir: string, {dev = false, isServer = false, buildId, config}: BaseConfigContext) {
|
||||||
const defaultLoaders = {
|
const defaultLoaders = {
|
||||||
babel: {
|
babel: {
|
||||||
loader: 'next-babel-loader',
|
loader: 'next-babel-loader',
|
||||||
|
@ -121,7 +130,7 @@ export default async function getBaseWebpackConfig (dir, {dev = false, isServer
|
||||||
modules: [
|
modules: [
|
||||||
NEXT_PROJECT_ROOT_NODE_MODULES,
|
NEXT_PROJECT_ROOT_NODE_MODULES,
|
||||||
'node_modules',
|
'node_modules',
|
||||||
path.join(__dirname, 'loaders'),
|
path.join(__dirname, 'webpack', 'loaders'), // The loaders Next.js provides
|
||||||
...nodePathList // Support for NODE_PATH environment variable
|
...nodePathList // Support for NODE_PATH environment variable
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import babelLoader from 'babel-loader'
|
import babelLoader from 'babel-loader'
|
||||||
|
|
||||||
module.exports = babelLoader.custom(babel => {
|
module.exports = babelLoader.custom(babel => {
|
||||||
const presetItem = babel.createConfigItem(require('../babel/preset'), {type: 'preset'})
|
const presetItem = babel.createConfigItem(require('../../babel/preset'), {type: 'preset'})
|
||||||
const reactJsxSourceItem = babel.createConfigItem(require('@babel/plugin-transform-react-jsx-source'), {type: 'plugin'})
|
const reactJsxSourceItem = babel.createConfigItem(require('@babel/plugin-transform-react-jsx-source'), {type: 'plugin'})
|
||||||
|
|
||||||
const configs = new Set()
|
const configs = new Set()
|
|
@ -1,6 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { RawSource } from 'webpack-sources'
|
import { RawSource } from 'webpack-sources'
|
||||||
import {BUILD_MANIFEST} from '../../lib/constants'
|
import {BUILD_MANIFEST} from '../../../lib/constants'
|
||||||
|
|
||||||
// This plugin creates a build-manifest.json for all assets that are being output
|
// This plugin creates a build-manifest.json for all assets that are being output
|
||||||
// It has a mapping of "entry" filename to real filename. Because the real filename can be hashed in production
|
// It has a mapping of "entry" filename to real filename. Because the real filename can be hashed in production
|
|
@ -1,6 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { RawSource } from 'webpack-sources'
|
import { RawSource } from 'webpack-sources'
|
||||||
import {PAGES_MANIFEST, ROUTE_NAME_REGEX} from '../../lib/constants'
|
import {PAGES_MANIFEST, ROUTE_NAME_REGEX} from '../../../lib/constants'
|
||||||
|
|
||||||
// This plugin creates a pages-manifest.json from page entrypoints.
|
// This plugin creates a pages-manifest.json from page entrypoints.
|
||||||
// This is used for mapping paths like `/` to `.next/dist/bundles/pages/index.js` when doing SSR
|
// This is used for mapping paths like `/` to `.next/dist/bundles/pages/index.js` when doing SSR
|
|
@ -1,8 +1,9 @@
|
||||||
|
// @flow
|
||||||
import { ConcatSource } from 'webpack-sources'
|
import { ConcatSource } from 'webpack-sources'
|
||||||
import {
|
import {
|
||||||
IS_BUNDLED_PAGE_REGEX,
|
IS_BUNDLED_PAGE_REGEX,
|
||||||
ROUTE_NAME_REGEX
|
ROUTE_NAME_REGEX
|
||||||
} from '../../lib/constants'
|
} from '../../../lib/constants'
|
||||||
|
|
||||||
class PageChunkTemplatePlugin {
|
class PageChunkTemplatePlugin {
|
||||||
apply (chunkTemplate) {
|
apply (chunkTemplate) {
|
||||||
|
@ -42,7 +43,7 @@ class PageChunkTemplatePlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class PagesPlugin {
|
export default class PagesPlugin {
|
||||||
apply (compiler) {
|
apply (compiler: any) {
|
||||||
compiler.plugin('compilation', (compilation) => {
|
compiler.plugin('compilation', (compilation) => {
|
||||||
compilation.chunkTemplate.apply(new PageChunkTemplatePlugin())
|
compilation.chunkTemplate.apply(new PageChunkTemplatePlugin())
|
||||||
})
|
})
|
|
@ -1,16 +1,18 @@
|
||||||
|
// @flow
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import promisify from '../../lib/promisify'
|
import promisify from '../../../lib/promisify'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { IS_BUNDLED_PAGE_REGEX } from '../../lib/constants'
|
import { IS_BUNDLED_PAGE_REGEX } from '../../../lib/constants'
|
||||||
|
|
||||||
const unlink = promisify(fs.unlink)
|
const unlink = promisify(fs.unlink)
|
||||||
|
|
||||||
export default class UnlinkFilePlugin {
|
export default class UnlinkFilePlugin {
|
||||||
|
prevAssets: any
|
||||||
constructor () {
|
constructor () {
|
||||||
this.prevAssets = {}
|
this.prevAssets = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
apply (compiler) {
|
apply (compiler: any) {
|
||||||
compiler.plugin('after-emit', (compilation, callback) => {
|
compiler.plugin('after-emit', (compilation, callback) => {
|
||||||
const removed = Object.keys(this.prevAssets)
|
const removed = Object.keys(this.prevAssets)
|
||||||
.filter((a) => IS_BUNDLED_PAGE_REGEX.test(a) && !compilation.assets[a])
|
.filter((a) => IS_BUNDLED_PAGE_REGEX.test(a) && !compilation.assets[a])
|
67
flow-typed/npm/uglifyjs-webpack-plugin_vx.x.x.js
vendored
Normal file
67
flow-typed/npm/uglifyjs-webpack-plugin_vx.x.x.js
vendored
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
// flow-typed signature: e7e7f59f1cdd9c963584b4620763fec3
|
||||||
|
// flow-typed version: <<STUB>>/uglifyjs-webpack-plugin_v1.1.6/flow_v0.73.0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is an autogenerated libdef stub for:
|
||||||
|
*
|
||||||
|
* 'uglifyjs-webpack-plugin'
|
||||||
|
*
|
||||||
|
* Fill this stub out by replacing all the `any` types.
|
||||||
|
*
|
||||||
|
* Once filled out, we encourage you to share your work with the
|
||||||
|
* community by sending a pull request to:
|
||||||
|
* https://github.com/flowtype/flow-typed
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare module 'uglifyjs-webpack-plugin' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We include stubs for each file inside this npm package in case you need to
|
||||||
|
* require those files directly. Feel free to delete any files that aren't
|
||||||
|
* needed.
|
||||||
|
*/
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/cjs' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/index' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/index' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/minify' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/versions' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/worker' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filename aliases
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/cjs.js' {
|
||||||
|
declare module.exports: $Exports<'uglifyjs-webpack-plugin/dist/cjs'>;
|
||||||
|
}
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/index.js' {
|
||||||
|
declare module.exports: $Exports<'uglifyjs-webpack-plugin/dist/index'>;
|
||||||
|
}
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/index.js' {
|
||||||
|
declare module.exports: $Exports<'uglifyjs-webpack-plugin/dist/uglify/index'>;
|
||||||
|
}
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/minify.js' {
|
||||||
|
declare module.exports: $Exports<'uglifyjs-webpack-plugin/dist/uglify/minify'>;
|
||||||
|
}
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/versions.js' {
|
||||||
|
declare module.exports: $Exports<'uglifyjs-webpack-plugin/dist/uglify/versions'>;
|
||||||
|
}
|
||||||
|
declare module 'uglifyjs-webpack-plugin/dist/uglify/worker.js' {
|
||||||
|
declare module.exports: $Exports<'uglifyjs-webpack-plugin/dist/uglify/worker'>;
|
||||||
|
}
|
1957
flow-typed/npm/webpack_vx.x.x.js
vendored
Normal file
1957
flow-typed/npm/webpack_vx.x.x.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
32
flow-typed/npm/write-file-webpack-plugin_vx.x.x.js
vendored
Normal file
32
flow-typed/npm/write-file-webpack-plugin_vx.x.x.js
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// flow-typed signature: 4a61661df41490b27db4f4aa0c03929e
|
||||||
|
// flow-typed version: <<STUB>>/write-file-webpack-plugin_v4.2.0/flow_v0.73.0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is an autogenerated libdef stub for:
|
||||||
|
*
|
||||||
|
* 'write-file-webpack-plugin'
|
||||||
|
*
|
||||||
|
* Fill this stub out by replacing all the `any` types.
|
||||||
|
*
|
||||||
|
* Once filled out, we encourage you to share your work with the
|
||||||
|
* community by sending a pull request to:
|
||||||
|
* https://github.com/flowtype/flow-typed
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare module 'write-file-webpack-plugin' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We include stubs for each file inside this npm package in case you need to
|
||||||
|
* require those files directly. Feel free to delete any files that aren't
|
||||||
|
* needed.
|
||||||
|
*/
|
||||||
|
declare module 'write-file-webpack-plugin/dist/index' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filename aliases
|
||||||
|
declare module 'write-file-webpack-plugin/dist/index.js' {
|
||||||
|
declare module.exports: $Exports<'write-file-webpack-plugin/dist/index'>;
|
||||||
|
}
|
Loading…
Reference in a new issue