Kay*_*Kay 21 javascript babel node.js webpack
我有一个应用程序,它是一个节点后端和一个反应前端。
当我尝试构建/运行节点应用程序时出现以下错误。
节点: v10.13.0
错误:
dist / index.js:314 regeneratorRuntime.mark(function _callee(productId){^
ReferenceError:未定义regeneratorRuntime
.babelrc
{
"presets": [ [
"@babel/preset-env", {
"targets": {
"node": "current"
},
}
], "@babel/preset-react"],
"plugins": [
"@babel/plugin-proposal-class-properties"
]
}
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
{
mode: "development",
entry: "./src/index.js",
target: "node",
externals: [nodeExternals()], // in order to ignore all modules in node_modules folder
stats: {
colors: true
},
devtool: "source-map",
output: {
path: path.resolve(__dirname, "dist"),
filename: "index.js",
sourceMapFilename: "index.js.map"
},
module: {
rules: [
{
enforce: "pre",
test: /\.js$/,
exclude: /node_modules/,
loader: "eslint-loader",
},
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}
}
],
},
node: {
__dirname: false,
__filename: false,
},
"plugins": [
new CleanWebpackPlugin(),
new WebpackShellPlugin({
onBuildStart: [],
onBuildEnd: ["nodemon dist/index.js"]
}),
]
},
Run Code Online (Sandbox Code Playgroud)
package.json
"dependencies": {
"connect": "^3.6.6",
"cors": "^2.8.5",
"dotenv": "^6.1.0",
"express": "^4.16.4",
"hellojs": "^1.17.1",
"i18n-iso-countries": "^3.7.8",
"morgan": "^1.9.1",
"react": "^16.6.3",
"react-dom": "^16.6.3",
"request": "^2.88.0",
"request-promise-native": "^1.0.5",
"serve-static": "^1.13.2",
"vhost": "^3.0.2"
},
"devDependencies": {
"@babel/cli": "^7.1.5",
"@babel/core": "^7.1.6",
"@babel/plugin-proposal-class-properties": "^7.1.0",
"@babel/preset-env": "^7.1.6",
"@babel/preset-react": "^7.0.0",
"babel-eslint": "^10.0.1",
"babel-loader": "^8.0.4",
"clean-webpack-plugin": "^1.0.0",
"copy-webpack-plugin": "^4.6.0",
"css-loader": "^1.0.1",
"eslint": "^5.9.0",
"eslint-config-google": "^0.10.0",
"eslint-loader": "^2.1.1",
"eslint-plugin-react": "^7.11.1",
"extract-loader": "^3.0.0",
"file-loader": "^2.0.0",
"node-sass": "^4.10.0",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"webpack": "^4.26.0",
"webpack-cli": "^3.1.2",
"webpack-node-externals": "^1.7.2",
"webpack-shell-plugin": "^0.5.0"
}
Run Code Online (Sandbox Code Playgroud)
for*_*d04 83
有两种主要配置 - 一种用于应用程序,一种用于库。
何时使用: ? 对于应用程序?全局范围 polyfills ? 最小束尺寸 ? 通过targets
? 无需处理 node_modules
polyfills
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage", // alternative mode: "entry"
"corejs": 3, // default would be 2
"targets": "> 0.25%, not dead"
// set your own target environment here (see Browserslist)
}
]
]
Run Code Online (Sandbox Code Playgroud)
安装依赖:
npm i --save-dev @babel/preset-env
npm i regenerator-runtime core-js // run-time dependencies
// regenerator-runtime: transform (async) generators and `async`/`await`
// core-js: other ECMAScript features like Promise, Set, etc.
Run Code Online (Sandbox Code Playgroud)
@babel/preset-env
有选择地包含targets
由Browserslist查询指定的polyfills。有两种模式 -usage
先尝试(更方便),否则entry
(更灵活和健壮):
useBuiltIns 'usage':无需import
手动操作。所有 polyfill 都会根据它们在文件中的代码使用情况自动添加。
useBuiltIns 'entry':在您的应用程序中添加这些import
条目一次(!) - 类似于@babel/polyfill
:
import "regenerator-runtime/runtime";
import "core-js/stable"; // or more selective import, like "core-js/es/array"
Run Code Online (Sandbox Code Playgroud)
对于高级情况,您可能只对Babel 助手使用@babel/transform-runtime
(dev) 和@babel/runtime
(run-time)以进一步减少包大小 - 称为助手别名。
何时使用: ? 对于图书馆?没有全球范围的污染?包括所有的polyfill,不是选择性的?更大的束尺寸可忽略
npm i --save-dev @babel/preset-env
npm i regenerator-runtime core-js // run-time dependencies
// regenerator-runtime: transform (async) generators and `async`/`await`
// core-js: other ECMAScript features like Promise, Set, etc.
Run Code Online (Sandbox Code Playgroud)
安装编译时和运行时依赖项:
npm i --save-dev @babel/plugin-transform-runtime // only for build phase
npm i @babel/runtime // runtime babel helpers + just regenerator runtime
// OR (choose one!)
npm i @babel/runtime-corejs3
// also contains other JS polyfills (not only regenerator runtime)
// depends on core-js-pure ("ponyfills"/polyfills that don't pollute global scope)
Run Code Online (Sandbox Code Playgroud)
见 @babel/plugin-transform-runtime
, @babel/runtime
, @babel/runtime-corejs
。
您还可以@babel/preset-env
仅用于语法转换,使用useBuiltIns: false
. 由于 library 选项不使用全局 polyfill,您可能还想转译node_modules
- 请参阅该absoluteRuntime
选项。
重大变化:@babel/polyfill从Babel 7.4.0开始被弃用。
旧版:如果您无法切换到core-js@3
,请将corejs
选项设置为2
(请参阅迁移)。@babel/runtime-corejs2
在选项 2 ( @babel/plugin-transform-runtime
) 的情况下安装。
目前,库方法没有考虑选择性目标- 这意味着您以更大的包大小(包括所有polyfill)为代价来获取本地范围的 polyfill 。
babel-polyfills是一种新的实验性方法,可以core-js
使用不同的策略注入不同的 polyfill(不仅仅是)。
这也允许选择性地包含本地范围的 polyfill。
koj*_*ow7 30
更新答案:
如果您使用的是Babel 7.4.0或更高版本,@babel/polyfill
则已弃用。相反,您将要使用以下内容:
import "core-js/stable";
import "regenerator-runtime/runtime";
Run Code Online (Sandbox Code Playgroud)
使用yarn添加这些:
yarn add core-js
yarn add regenerator-runtime
Run Code Online (Sandbox Code Playgroud)
原始答案:
我刚遇到此问题,并遇到以下解决方案:
在package.json中,我有@babel/polyfill
一个依赖项。但是,在我的index.js(我的主要js文件)中,我忽略了将以下行放在顶部:
import '@babel/polyfill'
导入后,一切正常。
正如其他答案所示,我不需要安装babel-runtime。
Ale*_*lig 23
I had this error in my react
project with webpack 4
and this was preventing the whole project to get rendered.
This is how I solved it:
Install plugin-transform-runtime
:
npm install @babel/plugin-transform-runtime -D
Run Code Online (Sandbox Code Playgroud)
Add plugin-transform-runtime
to the plugin's list in the .babelrc
file:
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
],
"plugins": [
["@babel/transform-runtime"] // <= Add it here
]
}
Run Code Online (Sandbox Code Playgroud)
Cyr*_*ris 19
这里已经有一个很好的答案(最初发布在Babel6问题上),我将翻译为Yarn。基本上,您需要babel运行时(不作为开发依赖项)和插件transform-runtime
yarn add @babel/runtime
yarn add -D @babel/plugin-transform-runtime
Run Code Online (Sandbox Code Playgroud)
并且,在.babelrc中,添加:
{
"presets": ["@babel/preset-env"],
"plugins": [
["@babel/transform-runtime"]
]
}
Run Code Online (Sandbox Code Playgroud)