# Introduction
Lately encountering a lot of out of memory error when running
twenty-front in watch mode with both TypeScript and lint checkers
```ts
Error: Worker terminated due to reaching memory limit: JS heap out of memory
at new NodeError (node:internal/errors:405:5)
at [kOnExit] (node:internal/worker:287:26)
at Worker.<computed>.onexit (node:internal/worker:209:20)
```
The existing configuration looks like this:
```ts
// packages/twenty-front/vite.config.ts
'cd ../.. && eslint packages/twenty-front --report-unused-disable-directives --max-warnings 0 --config .eslintrc.cjs',
```
This is wrong as computing the root eslintrc completely omitting
twenty-front's one ***and its ignorePattern*** so will be checking in
`node_modules` etc checking for project-structure :).
For example this a
[snippet](https://gist.github.com/prastoin/d7f8ad4ef5eb2f7732209b756a38094c)
of the above commands errors. We can see rule that should be disabled by
`eslintrc.react.cjs` extension made from twenty-front `eslintrc` :
```ts
/Users/paulrastoin/ws/twenty-two/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/__stories__/SettingsDataModelFieldSettingsFormCard.stories.tsx
23:27 warning Forbidden non-null assertion @typescript-eslint/no-non-null-assertion
```
## Fixes
- consume the `twenty-front` package eslint configuration within the
vite lint checker
- eslint overrides extends are getting merged based on glob inclusion of
their files declarations
- any linted files should be included in one of our `tsconfig`
- removed redundant and counter-productive negative `ignorePatterns`, as
eslint will naturally only lint files within configuration file
directory by default which will result making it go through local
`node_modules` project structure
## Now
Less cpu usage <3.5 gb and faster
```ts
// from packages/twenty-front
TIMING=1 npx eslint . --report-unused-disable-directives --max-warnings 0 --config .eslintrc.cjs --debug
#...
Rule | Time (ms) | Relative
:-----------------------------------------------|----------:|--------:
project-structure/folder-structure | 19578.927 | 20.2%
prettier/prettier | 13746.156 | 14.2%
no-redeclare | 9546.570 | 9.9%
@nx/workspace-explicit-boolean-predicates-in-if | 8167.805 | 8.4%
@typescript-eslint/no-unused-vars | 6872.803 | 7.1%
import/no-relative-packages | 6577.273 | 6.8%
@nx/enforce-module-boundaries | 6520.945 | 6.7%
import/no-duplicates | 4987.476 | 5.2%
react/no-direct-mutation-state | 2323.082 | 2.4%
react/require-render-return | 1155.261 | 1.2%
```
## Conclusion
Please note that `nx linter` might not be as strict as vite config
eslint runner
---------
Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
89 lines
2.9 KiB
JSON
89 lines
2.9 KiB
JSON
{
|
|
"name": "twenty-front",
|
|
"version": "0.51.0-canary",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"build": "VITE_DISABLE_TYPESCRIPT_CHECKER=true VITE_DISABLE_ESLINT_CHECKER=true NODE_OPTIONS=--max-old-space-size=4500 npx vite build && sh ./scripts/inject-runtime-env.sh",
|
|
"build:sourcemaps": "VITE_BUILD_SOURCEMAP=true VITE_DISABLE_TYPESCRIPT_CHECKER=true VITE_DISABLE_ESLINT_CHECKER=true NODE_OPTIONS=--max-old-space-size=7000 npx vite build && sh ./scripts/inject-runtime-env.sh",
|
|
"start:prod": "NODE_ENV=production npx vite --host",
|
|
"tsup": "npx tsup"
|
|
},
|
|
"engines": {
|
|
"node": "^18.17.1",
|
|
"npm": "please-use-yarn",
|
|
"yarn": "^4.0.2"
|
|
},
|
|
"browserslist": {
|
|
"production": [
|
|
">0.2%",
|
|
"not dead",
|
|
"not op_mini all"
|
|
],
|
|
"development": [
|
|
"last 1 chrome version",
|
|
"last 1 firefox version",
|
|
"last 1 safari version"
|
|
]
|
|
},
|
|
"msw": {
|
|
"workerDirectory": "public"
|
|
},
|
|
"dependencies": {
|
|
"@blocknote/xl-docx-exporter": "^0.22.0",
|
|
"@blocknote/xl-pdf-exporter": "^0.22.0",
|
|
"@cyntler/react-doc-viewer": "^1.17.0",
|
|
"@lingui/core": "^5.1.2",
|
|
"@lingui/detect-locale": "^5.2.0",
|
|
"@lingui/react": "^5.1.2",
|
|
"@nivo/calendar": "^0.87.0",
|
|
"@nivo/core": "^0.87.0",
|
|
"@nivo/line": "^0.87.0",
|
|
"@react-pdf/renderer": "^4.1.6",
|
|
"@scalar/api-reference-react": "^0.4.36",
|
|
"@tiptap/core": "^2.10.4",
|
|
"@tiptap/extension-document": "^2.10.4",
|
|
"@tiptap/extension-hard-break": "^2.10.4",
|
|
"@tiptap/extension-history": "^2.10.4",
|
|
"@tiptap/extension-paragraph": "^2.10.4",
|
|
"@tiptap/extension-placeholder": "^2.10.4",
|
|
"@tiptap/extension-text": "^2.10.4",
|
|
"@tiptap/extension-text-style": "^2.10.4",
|
|
"@tiptap/react": "^2.10.4",
|
|
"@xyflow/react": "^12.4.2",
|
|
"buffer": "^6.0.3",
|
|
"docx": "^9.1.0",
|
|
"file-saver": "^2.0.5",
|
|
"recoil-sync": "^0.2.0",
|
|
"transliteration": "^2.3.5",
|
|
"twenty-shared": "workspace:*"
|
|
},
|
|
"devDependencies": {
|
|
"@lingui/cli": "^5.1.2",
|
|
"@lingui/swc-plugin": "^5.1.0",
|
|
"@lingui/vite-plugin": "^5.1.2",
|
|
"@types/file-saver": "^2",
|
|
"@typescript-eslint/eslint-plugin": "6.21.0",
|
|
"@typescript-eslint/experimental-utils": "^5.62.0",
|
|
"@typescript-eslint/parser": "6.21.0",
|
|
"@typescript-eslint/utils": "6.21.0",
|
|
"eslint": "^8.53.0",
|
|
"eslint-config-next": "14.0.4",
|
|
"eslint-config-prettier": "^9.1.0",
|
|
"eslint-plugin-import": "2.29.1",
|
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
|
"eslint-plugin-lingui": "^0.9.0",
|
|
"eslint-plugin-prefer-arrow": "^1.2.3",
|
|
"eslint-plugin-prettier": "^5.1.2",
|
|
"eslint-plugin-project-structure": "^3.9.1",
|
|
"eslint-plugin-react": "^7.33.2",
|
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
"eslint-plugin-react-refresh": "^0.4.4",
|
|
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
"eslint-plugin-storybook": "^0.6.15",
|
|
"eslint-plugin-unicorn": "^51.0.1",
|
|
"eslint-plugin-unused-imports": "^3.0.0",
|
|
"optionator": "^0.9.1"
|
|
}
|
|
}
|