-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MFSU Why、What、How and FAQ #6766
Comments
感觉需要把,自定义插件如何适配的说明补充一下 @xiefengnian |
|
好像之前聊天有说,runtime 需要放在 |
求解释,MFSU 是啥,为何缩短了 compile 的时间。 |
antd 需要升级吗?用了之后 rc-field-form 报了以下错误:
|
assert 发现是用 postcss 引入 taiwindcss 的原因 |
@miaopeng @chengluliu 只给报错信息并不能解决你们的问题,需要复现步骤。 |
@realgkl 说来话长,得单独起一篇文章讲。 |
非常有想象力的技术设计,非常期待大佬出一篇文章科普一下 |
我使用的是antd pro,唯一不同的地方就是用了taiwindcss, 只要打开+ mfsu: {}, umi dev之后,终端都正常,但是打开页面,就出现报错,怀疑是用了taiwindcss的问题 |
<img src={'require('/source/path')'} /> |
允许的,试试就知道了。 |
@13500Jin 给复现步骤。 |
mark |
开启功能后,当链接上带上query后就会报错 |
MFSU_CACHE.json 中会生成绝对路径的Key,会导致不适用于多人协作(https://umijs.org/zh-CN/docs/mfsu#%E5%BC%80%E5%8F%91%E9%98%B6%E6%AE%B5) {
"deps": {
"/Users/path/to/node_modules/umi/node_modules/@umijs/renderer-react": "3.5.0-beta.17",
"/Users/path/to/node_modules/umi/node_modules/@umijs/runtime": "3.5.0-beta.17",
...
}
...
} |
报了和楼上一样的bug。。。请问要怎么处理? @Carreylife |
@sorrycc ,我的umi config文件大概是长这样的: const config = defineConfig({
routes,
nodeModulesTransform: {
type: 'none',
exclude: [],
},
mfsu: {},
webpack5: {},
dynamicImport: {},
// fastRefresh: {},
presets: [require.resolve('@dzg/umi-preset')],
extraBabelPlugins: [
[
'babel-plugin-import',
{
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
},
'antd',
],
],
devtool: isSourceMapEnabled ? 'source-map' : false,
chainWebpack: function(config: any, { webpack }: any) {
if (process.env.NODE_ENV === 'production') {
config.merge({
optimization: {
minimize: true,
splitChunks: {
chunks: 'all',
cacheGroups: {
reactVendor: {
test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,
name: 'reactVendor',
enforce: true,
priority: 5,
},
antd: {
test: /[\\/]node_modules[\\/](antd)[\\/]/,
name: 'antd',
enforce: true,
priority: 4,
},
umiVendor: {
test: /[\\/]node_modules[\\/](umi).*[\\/]/,
name: 'umiVendor',
enforce: true,
priority: 3,
},
// dzgVendors: {
// name: 'dzgVendors',
// enforce: true,
// priority: 2,
// test: /[\\/]node_modules[\\/](@dzg)[\\/]/,
// },
vendors: {
name: 'vendors',
enforce: true,
priority: 1,
test: /[\\/]node_modules[\\/]((?!(@dzg|antd|react|react-dom|umi)).*)[\\/]/,
},
default: {
test: /[\\/]src[\\/]((?!(pages)).*)[\\/]/,
name: 'default',
enforce: true,
},
},
},
},
});
if (process.env.SENTRY === 'on') {
config.plugin('SentryPlugin').use(SentryPlugin, [
{
include: './dist',
release: packageJSON.version,
configFile: 'sentry.properties',
urlPrefix: `~/${packageJSON.name}/`,
rewrite: true,
},
]);
}
}
},
antd: {},
title: 'dzg-tms-front',
locale: {
antd: true,
default: 'zh-CN',
baseNavigator: true,
},
chunks:
process.env.NODE_ENV === 'production'
? [
'reactVendor',
'antd',
'umiVendor',
// 'dzgVendors',
'vendors',
'default',
'umi',
]
: ['umi'],
history: { type: 'hash' },
hash: true,
publicPath: '/new-front/',
proxy,
ignoreMomentLocale: true,
copy: ['static'],
theme: theme,
mountElementId: 'dzg-tms-front',
});
export default config; |
@sorrycc development 环境下 publichPath 会导致类似的错误出现, 这里有个 mini 复现 mini复现 https://github.com/charlzyx/bug-report-umi-mfsu-mini .umirc.tsimport { defineConfig } from 'umi';
export default defineConfig({
+ base: '/app',
+ publicPath: '/app/',
+ webpack5: {},
+ mfsu: {},
+ dynamicImport: {},
nodeModulesTransform: {
type: 'none',
},
routes: [
{ path: '/', component: '@/pages/index' },
],
fastRefresh: {},
});
如何修正NODE_ENV=development 的时候, 不设置 publicPath (未测试) 可能的修复方法但是了解的不够深入, 不知道影响范围, 只能抛个砖 # L39
export const getMfsuPath = (api: IApi, { mode }: { mode: TMode }) => {
if (mode === 'development') {
const configPath = api.userConfig.mfsu?.development?.output;
+ // 形如 /app/ 这样的 publicPath, 需要修正一下输出路径
+ const publicPath = /^\/.*\/$/.test(api.config.publicPath) ?api.config.publicPath : '';
return configPath
- ? join(api.cwd, configPath)
- : join(api.paths.absTmpPath!, '.cache', '.mfsu');
+ ? join(api.cwd, configPath, publicPath)
+ : join(api.paths.absTmpPath!, '.cache', '.mfsu', publicPath);
} else {
+ // 生产环境不知道怎么处理
const configPath = api.userConfig.mfsu?.production?.output;
return configPath
? join(api.cwd, configPath)
: join(api.cwd, './.mfsu-production');
}
};
# L238
api.addBeforeMiddlewares(() => {
return (req, res, next) => {
- const { pathname } = url.parse(req.url);
+ const { pathname: originPathName } = url.parse(req.url);
+ // 形如 /app/ 这样的 publicPath, 需要修正一下输出路径
+ const publicPath = /^\/.*\/$/.test(api.config.publicPath) ?api.config.publicPath : '';
+ const pathname = originPathName.replace(publicPath, '');
+ // 没有后缀的请求, 不做处理
+ const noExtnameMaybeDir = !!require('path').extname(pathname);
if (
+ noExtnameMaybeDir ||
!api.userConfig.mfsu ||
pathname === '/' ||
!existsSync(
join(getMfsuPath(api, { mode: 'development' }), '.' + pathname),
)
) {
next();
} else {
const value = readFileSync(
join(getMfsuPath(api, { mode: 'development' }), '.' + pathname),
'utf-8',
);
res.setHeader('content-type', mime.lookup(parse(pathname || '').ext));
// 排除入口文件,因为 hash 是入口文件控制的
if (!/remoteEntry.js/.test(req.url)) {
res.setHeader('cache-control', 'max-age=31536000,immutable');
}
res.send(value);
}
};
}); |
神奇,antd-pro的项目,从umi 3.4.1升上来,国际化locale就全挂了,其他倒是好像都没问题…… |
需要升级 |
命令行没出错, devServer 没认出来 http://localhost:8000/admin/mf-va_remoteEntry.js这个链接,直接返回了index.html的内容 只是定位到错误,具体哪里改,还正在看。 |
@charlzyx 测试了一下,确实是publicPath引起的问题 |
Tested, seems to break css rendering of the page. |
什么时候完美支持SSR,现在好像还不支持。 |
用了dva能编译成功,但是访问用了connect的页面都会报错,偶尔第二次人更新后会正常,再刷新依然会报错,我怀疑models渲染的时候都没加载进来 |
不支持 config.dev.ts,写 config.ts 里。 |
大家单独提 ISSUE 吧,这个 ISSUE 太长了,不方便回复和跟踪。 |
Why?
提高研发效率。不管多大的项目,有缓存时启动 1s~3s+,热更新平均 500ms 内,
什么是 MFSU?
启用方式
FAQ
卡在 99% 不动了?
99% 是进度条显示问题,webpackbar 和 webpack 5 的兼容还有点问题,实际已经成功了,可忽略。
Invalid key: mfsu
npx umi -v
看下,请确保是 umi@3.5.0 或以上。Can not resolve ..., Do you mean ... 报错
e.g.
几个选择:
config.module.rule('mjs-rule').test(/.m?js/).resolve.set('fullySpecified', false);
国际化不生效
需更新
@umijs/preset-react
到最新,已在@umijs/plugin-locale
0.13.0 里修复。Module parse failed: Top-Level-Await 报错
e.g.
如果报错的是项目文件,给此文件后面加一行
export {}
,声明为 esm 模块格式。如果文件中有用动态 require 语法怎么办?
改成
await import
写法,比如:参考:#6877
开启 SSR 时报错
暂不支持。
覆盖依赖的样式不生效(比如覆盖 antd 的样式)
目前没有很好的解法,需修改代码,提升覆盖样式的优先级。
有使用 dva 插件同时效果不佳?
配置
dva: { disableModelsReExport: {} }
,因为export * from
目前尚未支持匹配到预编译。antd 主题配置为啥失效?
如果你是用的 配置 less 变量文件 这种方式,切换到 theme 配置的方式,或尝试关闭 babel-plugin-import 的自动引入 less 文件功能。
Beta 阶段手把手服务群
The text was updated successfully, but these errors were encountered: