在本地环境中我没有问题,但是使用此脚本在 jenkins 上运行生产环境却有问题:
yarn install --production
yarn build
构建大约需要 5 分钟,最后,jenkins 退出并显示以下控制台输出错误:
+ yarn install --production
yarn install v1.9.4
[1/4] Resolving packages...
[2/4] Fetching packages...
info [email protected]: The platform "linux" is incompatible with this module.
info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > [email protected]" has unmet peer dependency "[email protected] - 3".
warning " > [email protected]" has unmet peer dependency "popper.js@^1.14.7".
warning " > [email protected]" has incorrect peer dependency "react@~0.14.8 || ^15.0.0".
warning " > [email protected]" has incorrect peer dependency "react-dom@~0.14.8 || ^15.0.0".
warning " > [email protected]" has incorrect peer dependency "react@^15.4.2".
warning " > [email protected]" has unmet peer dependency "prop-types@^15.0.0".
warning " > [email protected]" has unmet peer dependency "prop-types@^15.0.0".
warning " > [email protected]" has unmet peer dependency "prop-types@^15.0.0".
warning " > [email protected]" has unmet peer dependency "prop-types@^15.5.4".
warning " > [email protected]" has incorrect peer dependency "react@^0.14.3".
warning " > [email protected]" has incorrect peer dependency "react-dom@^0.14.3".
warning " > [email protected]" has incorrect peer dependency "react-widgets@^4.2.2".
warning " > [email protected]" has incorrect peer dependency "react-widgets@^4.2.2".
warning " > [email protected]" has unmet peer dependency "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0".
warning "react-styleguidist > [email protected]" has unmet peer dependency "webpack@^2.0.0 || ^3.0.0 || ^4.0.0".
warning "react-styleguidist > [email protected]" has unmet peer dependency "webpack@^2.2.0 || ^3.0.0".
[4/4] Building fresh packages...
Done in 28.04s.
+ yarn build
yarn run v1.9.4
$ react-scripts build
Creating an optimized production build...
<--- Last few GCs --->
[31498:0x2ab86d0] 229792 ms: Mark-sweep 1277.3 (1459.7) -> 1277.2 (1461.7) MB, 1801.1 / 0.0 ms allocation failure GC in old space requested
[31498:0x2ab86d0] 231676 ms: Mark-sweep 1277.2 (1461.7) -> 1277.0 (1420.7) MB, 1884.4 / 0.0 ms last resort GC in old space requested
[31498:0x2ab86d0] 233210 ms: Mark-sweep 1277.0 (1420.7) -> 1277.0 (1419.2) MB, 1533.2 / 0.0 ms last resort GC in old space requested
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0xb1707c25879 <JSObject>
0: builtin exit frame: stringify(this=0xb1707c090a9 <Object map = 0x123a95202ba1>,0x11b5562822d1 <undefined>,0x11b5562822d1 <undefined>,0x26b024683529 <Object map = 0x2449e8a328d1>)
1: arguments adaptor frame: 1->3
2: toString [0x11b5562822d1 <undefined>:9522] [bytecode=0xf76e19f6a69 offset=28](this=0xb3c89b82b29 <Object map = 0x306621cb3d19>)
7: /* anonymous */(aka /* anonymous ...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [node]
2: 0x8c21ec [node]
3: v8::Utils::ReportOOMFailure(char const*, bool) [node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node]
5: v8::internal::Factory::NewRawOneByteString(int, v8::internal::PretenureFlag) [node]
6: v8::internal::String::SlowFlatten(v8::internal::Handle<v8::internal::ConsString>, v8::internal::PretenureFlag) [node]
7: v8::internal::JsonStringifier::SerializeString(v8::internal::Handle<v8::internal::String>) [node]
8: v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_<true>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>) [node]
9: v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_<false>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>) [node]
10: v8::internal::JsonStringifier::Stringify(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>) [node]
11: v8::internal::Builtin_JsonStringify(int, v8::internal::Object**, v8::internal::Isolate*) [node]
12: 0x14795198697d
error Command failed with exit code 1.
开始生成此错误的唯一更改是添加了 2 个节点依赖项:
"react-accessible-accordion": "^3.0.0",
"react-simple-collapse": "^0.1.2",
完整的package.json是这样的:
{
"name": "front-master",
"version": "0.1.0",
"private": true,
"dependencies": {
"@blueprintjs/core": "^2.3.1",
"@blueprintjs/select": "^2.0.1",
"@esri/arcgis-to-geojson-utils": "^1.3.0",
"@kenshooui/react-multi-select": "^1.1.5",
"antd": "^3.12.1",
"async": "^2.6.1",
"axios": "^0.18.0",
"bootstrap": "^4.1.2",
"classnames": "^2.2.6",
"esri-loader": "^2.4.0",
"fetch-jsonp": "^1.1.3",
"globalize": "^1.4.2",
"google-maps-react": "^1.1.11",
"highcharts": "^6.1.1",
"moment": "^2.22.2",
"npm": "^6.2.0",
"react": "^16.4.1",
"react-accessible-accordion": "^3.0.0",
"react-addons-css-transition-group": "^15.6.2",
"react-autosuggest": "^9.4.3",
"react-beautiful-dnd": "^10.0.4",
"react-bootstrap-table-next": "^3.1.2",
"react-bootstrap-table2-paginator": "^2.0.6",
"react-bootstrap-table2-toolkit": "^1.4.2",
"react-color": "^2.14.1",
"react-csv": "^1.0.15-RC2",
"react-custom-scrollbars": "^4.2.1",
"react-data-export": "^0.5.0",
"react-datepicker": "^2.8.0",
"react-dom": "^16.4.1",
"react-export-excel": "^0.5.3",
"react-intl": "^2.4.0",
"react-lineto": "^3.1.2",
"react-redux": "^5.0.7",
"react-router-dom": "^4.3.1",
"react-scripts": "^1.1.4",
"react-select": "^2.0.0",
"react-simple-collapse": "^0.1.2",
"react-sortable-hoc": "^0.8.3",
"react-transition-group": "^2.4.0",
"react-widgets": "^5.0.0-7",
"react-widgets-globalize": "^5.0.20",
"react-widgets-moment": "^4.0.27",
"reactstrap": "^5.0.0",
"redux": "^3.7.2",
"redux-thunk": "^2.3.0",
"terraformer-wkt-parser": "^1.2.0",
"video-react": "^0.14.1",
"x2js": "^3.2.1",
"xlsx": "^0.14.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"devDependencies": {
"eslint-plugin-react-hooks": "^1.3.0",
"react-docgen": "^2.21.0",
"react-styleguidist": "^7.1.0"
}
}
编辑:另外,当我推送我的分支时,我收到了来自 github 的警告
所以我检查了
yarn.lock
,我可以看到那里的版本是:
mem@^1.1.0:
version "1.1.0"
但是我如何升级未在
package.json
上定义的依赖项?
最后,我用这个:
https://stackoverflow.com/a/55378108/3541320
在我的
package.json
构建脚本中:
"build": "react-scripts --max_old_space_size=4096 build"
如果您使用内存较少(512MB)的服务器,则需要尝试以下两件事:
1 - 在反应脚本上设置更少的内存
"build": "react-scripts --max_old_space_size=256 build"
2 - 您可以按照 https://create-react-app.dev/docs/advanced-configuration 放入 .env 文件中所述禁用源映射的生成:
GENERATE_SOURCEMAP=false
有时增加 Node.js 的内存分配并不是您需要的解决方案。最常见的罪魁祸首是由循环依赖引起的递归引起的。
Madge 是一个可以帮助您检测 Nodejs/React 应用程序中何时存在循环依赖的工具
添加到您的脚本中
npm i -g madge
"madge": "madge --image ./madge-graph.svg --extensions js,jsx,ts,tsx --circular .",
也许您添加的 2 个依赖项使用了大量内存,这可以解释您从 jenkins 收到的错误。 您是否尝试按照此处的说明增加分配给詹金斯的内存?
希望对您有帮助!
看来我的情况很荒谬,但我不得不用 64 位节点替换 32 位节点。
执行 npm cache clean --force 为我解决问题
对于任何在使用
react-i18next
和 TypeScript 类型时偶然发现此错误的人:
翻译文件中只有一个空对象会导致“堆内存不足”错误。
休息:
export const EN_GB = {}
作品:
export const EN_GB = {
dummy: 'dummy'
}
我也面临同样的问题,通过 package.json 文件更改堆和构建内存,简单地将脚本行更改为:
"start": "react-scripts --max_old_space_size=4096 start",
"build": "react-scripts --max_old_space_size=4096 build",
我从 boldreports
得到了这个解决方案我今天遇到了同样的问题。当我在本地计算机上运行时,我的代码工作正常。但是当我将它部署到 netlify 时,它显示了您上面提到的错误。
我尝试过设置“max_old_space_size”变量以及其他帖子上的一些其他答案。 但他们都不适合我。
就我而言,本地计算机中的节点版本与 netlify 站点版本不同。
所以我用本地机器节点版本编辑了环境变量,构建成功完成。
我可以为我的一个项目修复它,如下所示:
在新创建的 git 分支上运行:
npm run eject
这将创建许多文件并更新您的包 json(启动/测试/构建命令,如果您没有更改它们)。
转到
config/webpack.config.js
并更新 TerserPlugin 选项属性“compress”和“mangle”:
new TerserPlugin({
terserOptions: {
...
compress: false,
mangle: true,
...
这大大减少了构建时间和内存使用量...... 代价是构建文件稍大一些(我的项目从 2.3Mo 变为 2.6Mo)。因此,在性能受限的情况下,您应该考虑它是否适合您的项目。
为什么会发生这样的变化?我尝试这样做是因为 Terser 文档 中包含以下信息:
这并不为人所知,但对于大多数 JavaScript 来说,空白删除和符号修饰占了缩小代码大小的 95% - 不是复杂的代码转换。
如果您想“恢复”弹出命令:https://stackoverflow.com/a/54248621/4739462