Я пытаюсь создать приложение Angular, использующее xml2js, однако получаю следующую ошибку:
$ ng build
⠦ Building...
✘ [ERROR] Could not resolve "timers"
node_modules/xml2js/lib/parser.js:36:25:
36 │ setImmediate = require('timers').setImmediate;
╵ ~~~~~~~~
The package "timers" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
Раньше я создавал приложение без каких-либо проблем, однако недавно у меня возникла эта проблема. С тех пор я не изменил angular.json
или tsconfig.app.json
. Также приложение корректно работает, если я запускаю dev-сервер через ng serve
и через ng serve -c production
.
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"<NDA_OMIT>": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "sass"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"outputPath": "dist/<NDA_OMIT>",
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": [
"zone.js",
"node_modules/setimmediate/setImmediate.js"
],
"allowedCommonJsDependencies": [
"fast-levenshtein"
],
"tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "sass",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/custom-theme.scss",
"src/styles.sass"
],
"stylePreprocessorOptions": {
"includePaths": [
"src/assets/styles"
]
},
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "8kb",
"maximumError": "16kb"
}
],
"outputHashing": "all",
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.production.ts"
}
]
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"proxyConfig": "src/proxy.conf.json"
},
"configurations": {
"production": {
"buildTarget": "<NDA_OMIT>:build:production"
},
"development": {
"buildTarget": "<NDA_OMIT>:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"buildTarget": "<NDA_OMIT>:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": [
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json",
"inlineStyleLanguage": "sass",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.sass"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": {
"lintFilePatterns": [
"src/**/*.ts",
"src/**/*.html"
]
}
}
}
}
},
"cli": {
"schematicCollections": [
"@angular-eslint/schematics"
]
}
}
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": [
"node",
"@angular/localize"
],
"baseUrl": "./",
"paths": {
"timers": [
"./node_modules/timers-browserify"
],
"stream": [
"./node_modules/stream-browserify"
],
"environment": [
"./src/environments/environment"
]
}
},
"files": [
"src/main.ts"
],
"include": [
"src/**/*.d.ts"
]
}
ng version
выводAngular CLI: 17.2.0
Node: 20.11.0
Package Manager: npm 10.4.0
OS: linux x64
Angular: 17.2.1
... animations, common, compiler, compiler-cli, core, forms
... localize, platform-browser, platform-browser-dynamic, router
Package Version
------------------------------------------------------------
@angular-devkit/architect 0.1702.0
@angular-devkit/build-angular 17.2.0
@angular-devkit/core 17.2.0
@angular-devkit/schematics 17.2.0
@angular/cdk 17.3.7
@angular/cli 17.2.0
@angular/material 17.3.7
@angular/material-moment-adapter 17.3.7
@schematics/angular 17.2.0
rxjs 7.8.1
typescript 5.3.3
zone.js 0.14.4
🤔 А знаете ли вы, что...
Angular предоставляет множество встроенных директив для управления отображением элементов на веб-странице.
удалите файл package-lock.json
и папку node_modules
, выполните npm install
, перезапустите приложение и посмотрите, работает ли оно.
Прежде всего рекомендуем обновить Node.js до одной из последних версий, так как есть несколько последних CVE. v20.15.1 (LTE) или 22.4.1 (текущая) [начало июля 2024 г.]
Второе: приведите все ваши угловые пакеты к одной и той же версии: 17.3.8 или 18.1.0. Рекомендую угловой 18.
Вы обновляете все пакеты до последней версии, выполнив npm update
в корневой папке проекта. После этого npm outdated
не должно показывать никаких записей.
Третье: в конце концов удалите свой node_modules
и свой package-lock.json
и выполните финальный npm install
.
Если ничего из этого не поможет, дайте нам знать.
Просто измените конструктор на @angular-devkit/build-angular:browser. и соответствующим образом настройте другие параметры. Он построится нормально.
Как показано ниже в вашем angular.json
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/app",
"main": "src/main.ts",
"index": "src/index.html",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
По какой-то причине установка таймеров решает проблему. xml2js работает отлично, даже если эта библиотека не предоставляет setImmediate
.