3

运行 Webpack3 和 Angular4 AoT 时出现错误(仅在 AoT 中发生)。我收到的错误是ERROR in Expected 'styles' to be an array of strings.. 我已经尝试了这里建议的其他几种方法https://github.com/webpack-contrib/style-loader/issues/123但没有运气。

下面是我的 webpack 配置:

const webpack = require('webpack');
const autoprefixer = require('autoprefixer');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const { ENV, IS_PRODUCTION, APP_VERSION, IS_DEV, dir, DEPS, IN_MEM_DB } = require('./helpers');
const { CheckerPlugin } = require('awesome-typescript-loader');
const AotPlugin = require('@ngtools/webpack').AotPlugin;

module.exports = function(options = {}) {
  return {
    context: dir(),
    resolve: {
      extensions: ['.ts', '.js', '.json', '.css', '.scss', '.html'],
      modules: [
        'node_modules',
        dir('src')
      ]
    },
    performance: {
      hints: false
    },
    output: {
      path: dir('dist'),
      filename: '[name].js',
      sourceMapFilename: '[name].map',
      chunkFilename: '[id].chunk.js'
    },
    module: {
      exprContextCritical: false,
      rules: [
        {
          test: /\.html$/,
          loader: 'raw-loader'
        },
        {
          test: /\.json/,
          loader: 'json-loader'
        },
        {
          test: /\.(png|woff|woff2|eot|ttf|svg|jpeg|jpg|gif)$/,
          loader: 'url-loader',
          query: {
            limit: '100000'
          }
        },
        {
          test: /\.css/,
          use: ['to-string-loader', 'css-loader' ,'postcss-loader?sourceMap']
        },
        {
          test: /\.scss$/,
          use: ['to-string-loader', 'css-loader', 'postcss-loader?sourceMap', 'sass-loader?sourceMap']
        },
      ]
    },
    plugins: [
      new AotPlugin({
        tsConfigPath: './tsconfig.json',
        entryModule: 'src/app/app.module#AppModule'
      }),
      new CopyWebpackPlugin([
        {
          from: 'src/assets',
          to: 'assets'
        },
        {
          from: 'node_modules/twemoji/2/svg',
          to: 'assets/svgs'
        }
      ]),
      new webpack.NamedModulesPlugin(),
      new webpack.DefinePlugin({
        ENV,
        IS_PRODUCTION,
        DEPS,
        APP_VERSION,
        HMR: options.HMR,
        IS_DEV,
        IN_MEM_DB
      }),
      new CheckerPlugin(),
      new webpack.LoaderOptionsPlugin({
        options: {
          context: dir(),
          tslint: {
            emitErrors: false,
            failOnHint: false,
            resourcePath: 'src'
          },
          postcss: function() {
            return [ autoprefixer ];
          },
          sassLoader: {
            includePaths: [
              dir('node_modules', '@swimlane', 'ngx-ui', 'release'),
              dir('node_modules', '@swimlane', 'ngx-ui', 'release', 'styles')
            ]
          }
        }
      })
    ]
  };

};

我的 package.json 是:

{
  "name": "turbine-ui",
  "version": "1.0.0-beta.6",
  "description": "Turbine UI",
  "main": "release/index.js",
  "scripts": {
    "start": "webpack-dev-server",
    "start:mdb": "cross-env MOCK_DB=true webpack-dev-server",
    "start:hmr": "webpack-dev-server --env.HMR",
    "build": "webpack --display-error-details --progress",
    "release": "cross-env NODE_ENV=production npm run build",
    "lint": "tslint './src/{,**/}*.ts'",
    "karma": "cross-env MOCK_DB=true karma start",
    "karma:watch": "karma start --no-single-run --auto-watch",
    "test": "npm run lint && npm run karma"
  },
  "engines": {
    "node": ">=7.0.0"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/turbine-ui/turbine-ui.git"
  },
  "author": "Swimlane",
  "license": "AGPL-3.0",
  "keywords": [
    "turbine"
  ],
  "bugs": {
    "url": "https://github.com/swimlane/turbine-ui/issues"
  },
  "homepage": "https://github.com/turbine-ui/turbine-ui#readme",
  "peerDependencies": {},
  "devDependencies": {
    "@angular/compiler-cli": "^4.2.5",
    "@types/jasmine": "^2.5.52",
    "@types/node": "^8.0.7",
    "angular-in-memory-web-api": "^0.3.2",
    "angular-router-loader": "^0.6.0",
    "angular2-template-loader": "^0.6.2",
    "autoprefixer": "^6.7.6",
    "awesome-typescript-loader": "^3.2.1",
    "clean-webpack-plugin": "^0.1.15",
    "codelyzer": "^3.1.2",
    "copy-webpack-plugin": "^4.0.1",
    "core-js": "^2.4.1",
    "cross-env": "^4.0.0",
    "css-loader": "^0.28.2",
    "extract-text-webpack-plugin": "^3.0.0-beta.3",
    "file-loader": "^0.11.1",
    "glob": "^7.1.2",
    "html-loader": "^0.4.5",
    "html-webpack-plugin": "^2.29.0",
    "jasmine-core": "^2.6.4",
    "json-loader": "^0.5.4",
    "karma": "^1.6.0",
    "karma-chrome-launcher": "^2.2.0",
    "karma-coverage": "^1.1.1",
    "karma-jasmine": "^1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-mocha-reporter": "^2.2.2",
    "karma-remap-coverage": "^0.1.4",
    "karma-sourcemap-loader": "^0.3.7",
    "karma-webpack": "^2.0.2",
    "node-sass": "^4.5.3",
    "postcss-loader": "^1.3.3",
    "raw-loader": "^0.5.1",
    "sass-loader": "^4.1.0",
    "source-map-loader": "^0.2.1",
    "string-replace-loader": "^1.1.0",
    "style-loader": "^0.18.0",
    "to-string-loader": "^1.1.5",
    "ts-helpers": "1.1.2",
    "tslint": "^5.4.3",
    "tslint-config-swimlane": "^3.0.2",
    "tslint-loader": "^3.4.3",
    "typescript": "^2.4.1",
    "url-loader": "^0.5.8",
    "webpack": "^3.0.0",
    "webpack-combine-loaders": "^2.0.3",
    "webpack-dev-server": "^2.5.0",
    "webpack-merge": "^4.1.0",
    "webpack-notifier": "^1.4.0"
  },
  "dependencies": {
    "@angular/animations": "^4.2.5",
    "@angular/common": "^4.2.5",
    "@angular/compiler": "^4.2.5",
    "@angular/core": "^4.2.5",
    "@angular/forms": "^4.2.5",
    "@angular/http": "^4.2.5",
    "@angular/platform-browser": "^4.2.5",
    "@angular/platform-browser-dynamic": "^4.2.5",
    "@angular/router": "^4.2.5",
    "@ngrx/core": "^1.2.0",
    "@ngrx/store": "^2.2.2",
    "@ngrx/store-devtools": "^3.2.4",
    "@swimlane/ngx-charts": "^6.0.0",
    "@swimlane/ngx-charts-dag": "^2.1.1",
    "@swimlane/ngx-datatable": "^9.3.0",
    "@swimlane/ngx-ui": "^17.0.2",
    "ajv": "^4.11.6",
    "angular2-moment": "^1.1.0",
    "core-js": "^2.4.1",
    "d3": "4.4.0",
    "human-duration": "^1.0.1",
    "js-yaml": "^3.8.4",
    "jwt-decode": "^2.2.0",
    "moment": "^2.17.1",
    "qs": "^6.5.0",
    "rxjs": "^5.4.2",
    "socket.io-client": "^1.7.3",
    "twemoji": "^2.3.0",
    "zone.js": "^0.8.12"
  }
}

除了上述方法,我还尝试了 Extract Text Webpack Plugin,但也没有运气。这是我尝试使用 ETWP 3.0.0-beta3 的配置

{
          test: /\.css/,
          use: ExtractTextPlugin.extract({
            fallback: "style-loader",
            use: ['to-string-loader', 'css-loader' ,'postcss-loader?sourceMap']
          })
        },
        {
          test: /\.scss$/,
          exclude: /\.component.scss$/,
          use: ExtractTextPlugin.extract({
            fallback: 'style-loader',
            use: ['css-loader', 'postcss-loader?sourceMap', 'sass-loader?sourceMap']
          })
        },
        {
          test: /\.component.scss$/,
          use: ExtractTextPlugin.extract({
            fallback: 'style-loader',
            use: ['to-string-loader', 'css-loader', 'postcss-loader?sourceMap', 'sass-loader?sourceMap']
          })
        }

我很好奇是否有人看到我可能正在做的其他案件可能没有的任何事情。

另外,有谁知道如何调试可能导致此问题的文件?我从收到的错误中找不到任何有用的错误。

4

0 回答 0