diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000000000000000000000000000000000..fd496a820ea94e6044698e3015fe1bb952f23cd1 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "semi": false +} diff --git a/package.json b/package.json index ad3472a26087f6304116019afb572d99922c4c73..ad4d466c5acec4bf098182776c4c9a78b4acde39 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "coveralls": "cat ./test/coverage/lcov.info | coveralls", "lint": "lerna run typescript && standard && standard --parser typescript-eslint-parser --plugin typescript packages/**/*.ts", "lint-fix": "standard --fix && standard --fix --parser typescript-eslint-parser --plugin typescript packages/**/*.ts", - "prettier": "prettier --single-quote --no-semi --write examples/**/*.js && yarn lint-fix", + "prettier": "prettier --write examples/**/*.js && yarn lint-fix", "typescript": "lerna run typescript", "prepublish": "lerna run prepublish", "publish-canary": "lerna version prerelease --preid canary --force-publish && release --pre", @@ -28,7 +28,7 @@ "pre-commit": "lint-staged", "lint-staged": { "examples/**/*.js": [ - "prettier --write --single-quote --no-semi", + "prettier --write", "standard --fix", "git add" ], diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index e6c1a9f178cba515f20fd869517fe8181b0d0b4d..3da3fa17e8847c53f6130aece07701d987bde399 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -1,33 +1,39 @@ -import path from 'path' -import webpack from 'webpack' -import resolve from 'next/dist/compiled/resolve/index.js' -import NextJsSsrImportPlugin from './webpack/plugins/nextjs-ssr-import' -import NextJsSSRModuleCachePlugin from './webpack/plugins/nextjs-ssr-module-cache' -import PagesManifestPlugin from './webpack/plugins/pages-manifest-plugin' -import BuildManifestPlugin from './webpack/plugins/build-manifest-plugin' -import ChunkNamesPlugin from './webpack/plugins/chunk-names-plugin' -import { ReactLoadablePlugin } from './webpack/plugins/react-loadable-plugin' +import fs from 'fs' import { - SERVER_DIRECTORY, - REACT_LOADABLE_MANIFEST, - CLIENT_STATIC_FILES_RUNTIME_WEBPACK, CLIENT_STATIC_FILES_RUNTIME_MAIN, + CLIENT_STATIC_FILES_RUNTIME_WEBPACK, + REACT_LOADABLE_MANIFEST, + SERVER_DIRECTORY, } from 'next-server/constants' +import resolve from 'next/dist/compiled/resolve/index.js' +import path from 'path' +import { promisify } from 'util' +import webpack from 'webpack' + import { + DOT_NEXT_ALIAS, NEXT_PROJECT_ROOT, NEXT_PROJECT_ROOT_DIST_CLIENT, PAGES_DIR_ALIAS, - DOT_NEXT_ALIAS, } from '../lib/constants' -import { TerserPlugin } from './webpack/plugins/terser-webpack-plugin/src/index' -import { ServerlessPlugin } from './webpack/plugins/serverless-plugin' +import { WebpackEntrypoints } from './entries' import { AllModulesIdentifiedPlugin } from './webpack/plugins/all-modules-identified-plugin' -import { SharedRuntimePlugin } from './webpack/plugins/shared-runtime-plugin' -import { HashedChunkIdsPlugin } from './webpack/plugins/hashed-chunk-ids-plugin' +import BuildManifestPlugin from './webpack/plugins/build-manifest-plugin' import { ChunkGraphPlugin } from './webpack/plugins/chunk-graph-plugin' -import { DropClientPage } from './webpack/plugins/next-drop-client-page-plugin' +import ChunkNamesPlugin from './webpack/plugins/chunk-names-plugin' import { importAutoDllPlugin } from './webpack/plugins/dll-import' -import { WebpackEntrypoints } from './entries' +import { HashedChunkIdsPlugin } from './webpack/plugins/hashed-chunk-ids-plugin' +import { DropClientPage } from './webpack/plugins/next-drop-client-page-plugin' +import NextJsSsrImportPlugin from './webpack/plugins/nextjs-ssr-import' +import NextJsSSRModuleCachePlugin from './webpack/plugins/nextjs-ssr-module-cache' +import PagesManifestPlugin from './webpack/plugins/pages-manifest-plugin' +import { ReactLoadablePlugin } from './webpack/plugins/react-loadable-plugin' +import { ServerlessPlugin } from './webpack/plugins/serverless-plugin' +import { SharedRuntimePlugin } from './webpack/plugins/shared-runtime-plugin' +import { TerserPlugin } from './webpack/plugins/terser-webpack-plugin/src/index' + +const fileExists = promisify(fs.exists) + type ExcludesFalse = (x: T | false) => x is T export default async function getBaseWebpackConfig( @@ -93,11 +99,27 @@ export default async function getBaseWebpackConfig( } : undefined + const useTypeScript = await fileExists(path.join(dir, 'tsconfig.json')) + const resolveConfig = { // Disable .mjs for node_modules bundling extensions: isServer - ? ['.tsx', '.ts', '.js', '.mjs', '.jsx', '.json', '.wasm'] - : ['.tsx', '.ts', '.mjs', '.js', '.jsx', '.json', '.wasm'], + ? [ + ...(useTypeScript ? ['.tsx', '.ts'] : []), + '.js', + '.mjs', + '.jsx', + '.json', + '.wasm', + ] + : [ + ...(useTypeScript ? ['.tsx', '.ts'] : []), + '.mjs', + '.js', + '.jsx', + '.json', + '.wasm', + ], modules: [ 'node_modules', ...nodePathList, // Support for NODE_PATH environment variable diff --git a/test/integration/basic/tsconfig.json b/test/integration/basic/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..0967ef424bce6791893e9a57bb952f80fd536e93 --- /dev/null +++ b/test/integration/basic/tsconfig.json @@ -0,0 +1 @@ +{}