使用 Rollup.JS 和 Formik 的外部库不尊重命名导出
External Library using Rollup.JS with Formik doesn't respect named exports
我正在使用 Rollup 来组合一个共享的表单组件库,它使用 Formik 作为基础层。我目前收到以下 'scheduler' 的编译错误,这是 Formik 在幕后使用的。
我已经尝试将其作为单独的 npm 依赖项手动安装,但仍然出现以下错误。
[!] Error: 'unstable_runWithPriority' is not exported by node_modules/formik/node_modules/scheduler/index.js
https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module
node_modules/formik/dist/formik.esm.js (9:9)
7: import toPath from 'lodash-es/toPath';
8: import invariant from 'tiny-warning';
9: import { unstable_runWithPriority, LowPriority } from 'scheduler';
遵循汇总文档:我尝试使用 rollup.config.js 的命名导出部分,例如:
plugins: [
peerDepsExternal(),
postcss({ extract: true, plugins: [autoprefixer] }),
json({ include: 'node_modules/**' }),
babel({ exclude: 'node_modules/**', presets: ['@babel/env', '@babel/preset-react'] }),
localResolve(),
resolve({dedupe: [ 'react', 'react-dom' ]}),
commonjs({
namedExports: {
// left-hand side can be an absolute path, a path
// relative to the current directory, or the name
// of a module in node_modules
'node_modules/formik/node_modules/scheduler/index.js': ['unstable_runWithPriority'],
'scheduler': ['unstable_runWithPriority'],
'node_modules/scheduler': ['unstable_runWithPriority'],
'./node_modules/scheduler': ['unstable_runWithPriority'],
'../node_modules/formik/node_modules/scheduler/index.js': ['unstable_runWithPriority']
}
}),
globals(),
externals(),
builtins(),
filesize()
]
如您所见,我已经尝试了一些目的地/路径以取得良好效果。谁能指出我如何重新编译的正确方向?或者如何正确定义我的命名导出?我在网络上阅读了一些问题,这些问题表明插件数组的顺序可能会影响事情,但我将它们交换了一下,但我仍然不知所措。
您可能认为地球上没有人会犯同样的隐秘错误。你会错的。找到了解决方案。 (与插件顺序有关)
plugins: [
globals(),
builtins(),
externals(),
babel({ exclude: 'node_modules/**', presets: ['@babel/env', '@babel/preset-react'] }),
commonjs({
namedExports: {
// left-hand side can be an absolute path, a path
// relative to the current directory, or the name
// of a module in node_modules
'node_modules/formik/node_modules/scheduler/index.js' : ['unstable_runWithPriority'],
}
}),
peerDepsExternal(),
postcss({ extract: true, plugins: [autoprefixer] }),
json({ include: 'node_modules/**' }),
localResolve(),
resolve({dedupe: [ 'react', 'react-dom' ]}),
filesize()
]
这个插件顺序帮我解决了这个问题。
plugins: [
babel({
exclude: 'node_modules/**',
presets: ['@babel/env', '@babel/preset-react'],
}),
typescript({ useTsconfigDeclarationDir: true }),
commonjs({
namedExports: {
// left-hand side can be an absolute path, a path
// relative to the current directory, or the name
// of a module in node_modules
'node_modules/formik/node_modules/scheduler/index.js': [
'unstable_runWithPriority',
],
},
}),
peerDepsExternal(),
scss(),
json({
compact: true,
}),
resolve(),
],
使用这个语法:
namedExports: {
'scheduler': ['unstable_runWithPriority', 'unstable_LowPriority']
}
我正在使用 Rollup 来组合一个共享的表单组件库,它使用 Formik 作为基础层。我目前收到以下 'scheduler' 的编译错误,这是 Formik 在幕后使用的。
我已经尝试将其作为单独的 npm 依赖项手动安装,但仍然出现以下错误。
[!] Error: 'unstable_runWithPriority' is not exported by node_modules/formik/node_modules/scheduler/index.js
https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module
node_modules/formik/dist/formik.esm.js (9:9)
7: import toPath from 'lodash-es/toPath';
8: import invariant from 'tiny-warning';
9: import { unstable_runWithPriority, LowPriority } from 'scheduler';
遵循汇总文档:我尝试使用 rollup.config.js 的命名导出部分,例如:
plugins: [
peerDepsExternal(),
postcss({ extract: true, plugins: [autoprefixer] }),
json({ include: 'node_modules/**' }),
babel({ exclude: 'node_modules/**', presets: ['@babel/env', '@babel/preset-react'] }),
localResolve(),
resolve({dedupe: [ 'react', 'react-dom' ]}),
commonjs({
namedExports: {
// left-hand side can be an absolute path, a path
// relative to the current directory, or the name
// of a module in node_modules
'node_modules/formik/node_modules/scheduler/index.js': ['unstable_runWithPriority'],
'scheduler': ['unstable_runWithPriority'],
'node_modules/scheduler': ['unstable_runWithPriority'],
'./node_modules/scheduler': ['unstable_runWithPriority'],
'../node_modules/formik/node_modules/scheduler/index.js': ['unstable_runWithPriority']
}
}),
globals(),
externals(),
builtins(),
filesize()
]
如您所见,我已经尝试了一些目的地/路径以取得良好效果。谁能指出我如何重新编译的正确方向?或者如何正确定义我的命名导出?我在网络上阅读了一些问题,这些问题表明插件数组的顺序可能会影响事情,但我将它们交换了一下,但我仍然不知所措。
您可能认为地球上没有人会犯同样的隐秘错误。你会错的。找到了解决方案。 (与插件顺序有关)
plugins: [
globals(),
builtins(),
externals(),
babel({ exclude: 'node_modules/**', presets: ['@babel/env', '@babel/preset-react'] }),
commonjs({
namedExports: {
// left-hand side can be an absolute path, a path
// relative to the current directory, or the name
// of a module in node_modules
'node_modules/formik/node_modules/scheduler/index.js' : ['unstable_runWithPriority'],
}
}),
peerDepsExternal(),
postcss({ extract: true, plugins: [autoprefixer] }),
json({ include: 'node_modules/**' }),
localResolve(),
resolve({dedupe: [ 'react', 'react-dom' ]}),
filesize()
]
这个插件顺序帮我解决了这个问题。
plugins: [
babel({
exclude: 'node_modules/**',
presets: ['@babel/env', '@babel/preset-react'],
}),
typescript({ useTsconfigDeclarationDir: true }),
commonjs({
namedExports: {
// left-hand side can be an absolute path, a path
// relative to the current directory, or the name
// of a module in node_modules
'node_modules/formik/node_modules/scheduler/index.js': [
'unstable_runWithPriority',
],
},
}),
peerDepsExternal(),
scss(),
json({
compact: true,
}),
resolve(),
],
使用这个语法:
namedExports: {
'scheduler': ['unstable_runWithPriority', 'unstable_LowPriority']
}