我有一个使用 Angular 的 webpack 的工作配置,以便将 scss 文件插入到 bundle.js 中
{
test: /\.scss$/,
use: ['raw-loader', 'resolve-url-loader', 'sass-loader?sourceMap']
}
但后来我想获得一个包含应用程序中所有 scss 的单个 css 文件,所以我像这样使用 ExtractTextPlugin
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: ['raw-loader', 'resolve-url-loader', 'sass-loader?sourceMap'],
use: ['resolve-url-loader', 'sass-loader?sourceMap']
})
}
现在,我没有使用“raw-loader”,因为我知道文件不必插入到 bundle.js 中,但我在编译时遇到错误。
ERROR in ./~/resolve-url-loader!./~/sass-loader/lib/loader.js?sourceMap!./app/app.component.scss
Module parse failed: /Users/david/Documents/work/my-angular-seed/node_modules/resolve-url-loader/index.js!/Users/david/Documents/work/my-angular-seed/node_
modules/sass-loader/lib/loader.js?sourceMap!/Users/david/Documents/work/my-angular-seed/app/app.component.scss Unexpected token (1:0)
You may need an appropriate loader to handle this file type.
| .app {
| border: 1px solid red;
| }
如果我使用 raw-loader,构建会很好,但是在加载 index.html 时会出错
Uncaught Error: Expected 'styles' to be an array of strings.
有谁知道如何解决这个问题以及为什么会这样?谢谢!
编辑
我一直在检查更多,我想我知道问题是什么,但我不知道如何解决它。
如果我使用这个配置
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader', 'sass-loader']
})
}
生成了 app.css,一切都很好。但是如果我检查 bundle.js 组件已经变成了这个
AppComponent = __decorate([
core_1.Component({
selector: 'app-root',
styles: [__webpack_require__(23)],
template: "\n <div class=\"app\">\n Hello!\n </div>\n "
})
], AppComponent);
如果我检查模块 23 我发现它是空的
/* 23 */
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
/***/ }),
所以我猜这就是 angular 抱怨的问题,styles 是一个空数组。我认为这里应该做的是完全删除样式标签,因为 css 被用作外部分隔文件,对吧?有没有办法来解决这个问题?