使用 Babel 7 转译代码以用于 Node12/Babel6 应用
Transpile code with Babel 7 to be used in a Node12/Babel6 app
我正在创建一个包,它将使用 renderToStaticMarkup
将一些 React 组件(准确地说是 MDX)渲染成一个字符串。
我正在使用 Webpack + Babel 7 来转换它。
现在我需要能够从遗留 Node12/Babel6 应用程序中使用此代码。
当我尝试这样做时出现此错误:
Requires Babel "^7.0.0-0", but was loaded with "6.26.3".
我不明白为什么会这样。我的包不应该需要任何 babel 运行时,它有 import/export+async/await,所有这些都应该在不需要任何运行时的情况下转换为 Node12。
webpack.config.js:
const path = require('path')
module.exports = {
mode: 'production',
target: 'node',
entry: ['./src/index.ts'],
output: {
path: path.resolve(__dirname, 'dist'),
library: {
type: 'commonjs2',
},
},
module: {
rules: [
{
test: /\.(js|ts|tsx)$/,
use: [
{
loader: 'babel-loader',
},
],
},
{
test: /\.mdx?$/,
use: [
{
loader: 'babel-loader',
},
{
loader: '@mdx-js/loader',
},
],
},
],
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
},
}
.babelrc:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "12"
},
"useBuiltIns": false
}
],
[
"@babel/preset-react",
{
"runtime": "automatic"
}
],
"@babel/preset-typescript"
]
}
您的 Babel 6 应用程序可能通过 Babel 传递您的依赖项。
编译文件时,Babel 6 的默认行为是加载最近的 .babelrc
文件并使用它(这在 Babel 7 中已更改 - https://babeljs.io/docs/en/config-files#6x-vs-7x-babelrc-loading):您的 Babel 6 实例是读取 Babel 7 使用的 .babelrc
文件,尝试加载 Babel 7 插件并抛出。
一种可能的解决方法是将 .babelrc
重命名为 .babelrc.json
:Babel 6 不支持它,因此它将被忽略。
如果我们谈论的是已发布的软件包,一个正确的解决方案是将 .babelrc
添加到您的 .npmignore
文件:这样做它不会出现在您的 node_modules
, 所以不会被 Babel 6 意外加载.
我正在创建一个包,它将使用 renderToStaticMarkup
将一些 React 组件(准确地说是 MDX)渲染成一个字符串。
我正在使用 Webpack + Babel 7 来转换它。
现在我需要能够从遗留 Node12/Babel6 应用程序中使用此代码。 当我尝试这样做时出现此错误:
Requires Babel "^7.0.0-0", but was loaded with "6.26.3".
我不明白为什么会这样。我的包不应该需要任何 babel 运行时,它有 import/export+async/await,所有这些都应该在不需要任何运行时的情况下转换为 Node12。
webpack.config.js:
const path = require('path')
module.exports = {
mode: 'production',
target: 'node',
entry: ['./src/index.ts'],
output: {
path: path.resolve(__dirname, 'dist'),
library: {
type: 'commonjs2',
},
},
module: {
rules: [
{
test: /\.(js|ts|tsx)$/,
use: [
{
loader: 'babel-loader',
},
],
},
{
test: /\.mdx?$/,
use: [
{
loader: 'babel-loader',
},
{
loader: '@mdx-js/loader',
},
],
},
],
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
},
}
.babelrc:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "12"
},
"useBuiltIns": false
}
],
[
"@babel/preset-react",
{
"runtime": "automatic"
}
],
"@babel/preset-typescript"
]
}
您的 Babel 6 应用程序可能通过 Babel 传递您的依赖项。
编译文件时,Babel 6 的默认行为是加载最近的 .babelrc
文件并使用它(这在 Babel 7 中已更改 - https://babeljs.io/docs/en/config-files#6x-vs-7x-babelrc-loading):您的 Babel 6 实例是读取 Babel 7 使用的 .babelrc
文件,尝试加载 Babel 7 插件并抛出。
一种可能的解决方法是将 .babelrc
重命名为 .babelrc.json
:Babel 6 不支持它,因此它将被忽略。
如果我们谈论的是已发布的软件包,一个正确的解决方案是将 .babelrc
添加到您的 .npmignore
文件:这样做它不会出现在您的 node_modules
, 所以不会被 Babel 6 意外加载.