Last active
April 21, 2021 13:31
-
-
Save puttpotsawee/c7dc2b330320186756414ba42e50caa6 to your computer and use it in GitHub Desktop.
[MicroFrontend Workshop 1] Path File
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const path = require('path'); | |
const fs = require('fs'); | |
const getPublicUrlOrPath = require('react-dev-utils/getPublicUrlOrPath'); | |
// Make sure any symlinks in the project folder are resolved: | |
// https://github.com/facebook/create-react-app/issues/637 | |
const appDirectory = fs.realpathSync(process.cwd()); | |
const resolveApp = relativePath => path.resolve(appDirectory, relativePath); | |
// We use `PUBLIC_URL` environment variable or "homepage" field to infer | |
// "public path" at which the app is served. | |
// webpack needs to know it to put the right <script> hrefs into HTML even in | |
// single-page apps that may serve index.html for nested URLs like /todos/42. | |
// We can't use a relative path in HTML because we don't want to load something | |
// like /todos/42/static/js/bundle.7289d.js. We have to know the root. | |
const publicUrlOrPath = getPublicUrlOrPath( | |
process.env.NODE_ENV === 'development', | |
require(resolveApp('package.json')).homepage, | |
process.env.PUBLIC_URL, | |
); | |
const buildPath = process.env.BUILD_PATH || 'build'; | |
const moduleFileExtensions = [ | |
'web.mjs', | |
'mjs', | |
'web.js', | |
'js', | |
'web.ts', | |
'ts', | |
'web.tsx', | |
'tsx', | |
'json', | |
'web.jsx', | |
'jsx', | |
]; | |
// Resolve file paths in the same order as webpack | |
const resolveModule = (resolveFn, filePath) => { | |
const extension = moduleFileExtensions.find(ext => | |
fs.existsSync(resolveFn(`${filePath}.${ext}`)), | |
); | |
if (extension) { | |
return resolveFn(`${filePath}.${extension}`); | |
} | |
return resolveFn(`${filePath}.js`); | |
}; | |
module.exports = { | |
dotenv: resolveApp('.env'), | |
appPath: resolveApp('.'), | |
appBuild: resolveApp(buildPath), | |
appPublic: resolveApp('public'), | |
appHtml: resolveApp('public/index.html'), | |
appIndexJs: resolveModule(resolveApp, 'src/index'), | |
appPackageJson: resolveApp('package.json'), | |
appSrc: resolveApp('src'), | |
appTsConfig: resolveApp('tsconfig.json'), | |
appJsConfig: resolveApp('jsconfig.json'), | |
yarnLockFile: resolveApp('yarn.lock'), | |
testsSetup: resolveModule(resolveApp, 'src/setupTests'), | |
proxySetup: resolveApp('src/setupProxy.js'), | |
appNodeModules: resolveApp('node_modules'), | |
swSrc: resolveModule(resolveApp, 'src/service-worker'), | |
publicUrlOrPath, | |
}; | |
module.exports.moduleFileExtensions = moduleFileExtensions; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const WebpackManifestPlugin = require('webpack-manifest-plugin'); | |
const paths = require('../paths'); | |
// plugin | |
new WebpackManifestPlugin({ | |
fileName: 'asset-manifest.json', | |
publicPath: paths.publicUrlOrPath, | |
generate: (seed, files, entrypoints) => { | |
const manifestFiles = files.reduce((manifest, file) => { | |
// eslint-disable-next-line no-param-reassign | |
manifest[file.name] = file.path; | |
return manifest; | |
}, seed); | |
const entrypointFiles = entrypoints.main.filter( | |
fileName => !fileName.endsWith('.map'), | |
); | |
return { | |
files: manifestFiles, | |
entrypoints: entrypointFiles, | |
}; | |
}, | |
}), |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment