Angular 项目中的 Webpack 错误

Posted

技术标签:

【中文标题】Angular 项目中的 Webpack 错误【英文标题】:Webpack Error in Angular Project 【发布时间】:2018-09-04 08:00:36 【问题描述】:

将我的全局 Angular CLI 升级到 1.7.3 版后出现此错误(不确定是否会破坏构建)。 Webpack 似乎不再理解路径引用了。

ERROR in ./src/app/app.component.css
(Emitted value instead of an instance of Error) CssSyntaxError: C:\Users\kkehinde\Documents\WebStorm\Admin\src\assets\css\theme-default.css:7102:19: Can't resolve '../img/filetree/code.png'
in 'C:\Users\kkehinde\Documents\WebStorm\Admin\src\app'

  7100 | 
  7101 | li.ext_xml 
> 7102 |   background: url(../img/filetree/code.png) left top no-repeat;
       |                   ^
  7103 | 
  7104 | li.ext_zip 

ERROR in ./src/app/app.component.css
(Emitted value instead of an instance of Error) CssSyntaxError: C:\Users\kkehinde\Documents\WebStorm\Admin\src\assets\css\theme-default.css:7105:19: Can't resolve '../img/filetree/zip.png' in 'C:\Users\kkehinde\Documents\WebStorm\Admin\src\app'

  7103 | 
  7104 | li.ext_zip 
> 7105 |   background: url(../img/filetree/zip.png) left top no-repeat;
       |                   ^
  7106 | 
  7107 | /* END Filetree */

我的 Package.json 在下面,我在 4.7.2 版本中添加了锁定的 node-sass,因为有人建议这是破坏 webpack 构建但仍然出现上述错误的原因。


  "name": "admin",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": 
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  ,
  "private": true,
  "dependencies": 
    "@angular/animations": "^4.4.4",
    "@angular/cdk": "^2.0.0-beta.12",
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/material": "^2.0.0-beta.12",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "angular2-notifications": "^0.7.8",
    "core-js": "^2.4.1",
    "ng2-progressbar": "^1.3.0",
    "ngx-progressbar": "^2.0.8",
    "rxjs": "^5.1.0",
    "zone.js": "^0.8.4"
  ,
  "devDependencies": 
    "@angular/cli": "^1.5.2",
    "@angular/compiler-cli": "^4.0.0",
    "@angular/language-service": "^4.0.0",
    "@types/jasmine": "~2.5.53",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "~3.0.1",
    "jasmine-core": "~2.6.2",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "~1.7.0",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.1.2",
    "ts-node": "~3.0.4",
    "tslint": "~5.3.2",
    "typescript": "~2.3.3",
    "node-sass": "4.7.2"
  

【问题讨论】:

【参考方案1】:

将 URL 作为字符串传递。 这样:

li.ext_xml

7102 |背景: url("../img/filetree/code.png") 左上无重复; | ^ 7103 |

【讨论】:

我的所有构建中都有无数的相同错误实例,这一直在工作,我真的不明白为什么要进行此更改,我可能错了【参考方案2】:

问题是@angular/cli@1.7.3 使用Webpack@3.11 无法识别上面屏幕截图中css 中的路径。

我不得不降级到@angular/cli@1.5.6,它使用@webpack@3.8,成功构建了项目。

【讨论】:

【参考方案3】:

将第7102行代码改为

background: url("../img/filetree/code.png") left top no-repeat;

也将 7015 改为

 background: url("../img/filetree/zip.png") left top no-repeat;

【讨论】:

【参考方案4】:

这似乎是最新 Angular CLI 版本的一个已知问题。

在不带引号的情况下声明背景 url 是完全有效的。之前在 *** 上已经回答了这个问题,并且它是有效的语法。

CSS background-image - What is the correct usage?

它在升级之前可以工作,但在升级之后就没有了,所以这要么是新版本中的错误,要么是新版本在某些方面更严格,但 CSS 语法看起来不错。

搜索错误发现如下:Can't resolve SVGID after upgrading to 1.7Ng build fails. CssSyntaxError since 1.7.0-rc.0fix(@angular/cli): improve processing multi-line url() CSS rules

在 1.7.3 版本之后,一个修复被合并到主分支中,所以我希望您的问题在 1.7.3 之后的下一个版本中得到修复。

【讨论】:

以上是关于Angular 项目中的 Webpack 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试配置一个新的 webpack + angular2 项目,我收到错误 TS2384: Overload signatures must all beambient or non-ambient

angular 8 webpack-bundle-analyzer 寻找错误的 polyfill 文件

忽略 Webpack-dev-server 中的 Typescript 错误

使用 Angular 在 Webpack 中定义 metisMenu

带有primeng 404问题的angular-cli@webpack

延迟加载模块中的 Angular single-spa 延迟加载路由调用未定义的 webpack 错误