【问题标题】:Setup issue with webpack, angular 2, css and sasswebpack、angular 2、css 和 sass 的设置问题
【发布时间】:2017-02-14 03:57:07
【问题描述】:

[从原始问题更新] 我正在尝试使用 webpack 设置最新版本的 Angular2 来处理 sass。我现在正在处理 scss 文件。但是,问题在于现在的 css。

我在 app.component.ts 文件中添加了以下内容...

require('../../node_modules/bootstrap/dist/css/bootstrap.css');
require('../../public/styles/styles.scss');

我从 npm start 收到构建错误...

    ./~/bootstrap/dist/css/bootstrap.css
Module build failed: ReferenceError: window is not defined
bootstrap\dist\css\bootstrap.css doesn't export content

webpack.common.js 的相关部分...

{
    test: /\.css$/,
    loader: ExtractTextPlugin.extract({ loader: [{ loader: "style-loader" }, { loader: "css-loader" } ] })
  },
  {
    test: /\.scss$/,
    loader: ExtractTextPlugin.extract({ loader: [{ loader: "css-loader" }, { loader: "sass-loader" } ] })
  }

我的 package.json 中的一个 sn-p...

"devDependencies": {
"@types/jasmine": "2.5.38",
"@types/node": "^6.0.42",
"codelyzer": "~2.0.0-beta.1",
"faker": "3.1.0",
"jasmine-core": "2.5.2",
"jasmine-spec-reporter": "2.5.0",
"json-server": "0.9.4",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"node-sass": "^4.4.0",
"protractor": "~4.0.13",
"raw-loader": "^0.5.1",
"sass-loader": "5.0.1",
"ts-node": "1.2.1",
"tslint": "4.3.0",
"typescript": "2.1.6",
"webdriver-manager": "11.1.1",
"angular2-template-loader": "^0.6.0",
"awesome-typescript-loader": "^3.0.0-beta.18",
"css-loader": "^0.26.1",
"extract-text-webpack-plugin": "2.0.0-beta.5",
"html-webpack-plugin": "^2.16.1",
"file-loader": "^0.10.0",
"html-loader": "^0.4.3",
"style-loader": "^0.13.1",
"postcss-loader": "1.2.2",
"webpack": "2.2.1",
"webpack-dev-server": "2.3.0",
"webpack-merge": "^2.6.1"

}

我已经尝试解决这个问题好几天了。非常感谢任何帮助。

【问题讨论】:

  • 我删除了我的答案,尝试根据插件示例更改您的配置。 github.com/jtangelder/sass-loader
  • 查看插件示例,我将 webpack 配置更改为 { test: /\.scss$/, loader: ExtractTextPlugin.extract({ loader: [{ loader: "css-loader" }, { loader: "sass-loader" }], fallbackLoader: "style-loader" }) } 现在我得到这个错误“预期'styles'是一个字符串数组”我有一个带有这个styleUrls的组件:['./ invoice-list.component.scss'],如果我将其注释掉,错误就会消失
  • 嗨,Lee,安装raw-loader,并在css-loader 之前使用它。那应该解决Expected 'styles' to be an array of strings的问题
  • 添加了这个并且仍然得到同样的错误...{ test: /\.scss$/, loader: ExtractTextPlugin.extract({ loader: [{ loader: "raw-loader" },{ loader: "css-loader" }, { loader: "sass-loader" }], fallbackLoader: "style-loader" }) }
  • 您可以尝试像我在下面那样设置它,然后试一试吗?就像一个消除的过程

标签: angular sass webpack-2


【解决方案1】:

这是一个关于使用 scss 的示例。需要注意的是,我不会将生成的 css 编译到单独的文件中。它在我生成的 js 文件中作为模块生成:

  {
    test: /\.(scss)$/,
    loaders: [
      'raw-loader',
      'sass-loader'
    ]
  }

【讨论】:

    【解决方案2】:

    所以,我找到了答案。角度文档和 webpack 文档似乎都已过时。

    我最终将此作为我的工作配置文件...

    var webpack = require('webpack');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    var ExtractTextPlugin = require('extract-text-webpack-plugin');
    var helpers = require('./helpers');
    
    module.exports = {
      entry: {
        'polyfills': './src/polyfills.ts',
        'vendor': './src/vendor.ts',
        'app': './src/main.ts'
      },
    
      resolve: {
        extensions: ['.ts', '.js', '.json', '.css', '.scss', '.html']
      },
    
      module: {
        rules: [
          {
            test: /\.ts$/,
            loaders: [{
              loader: 'awesome-typescript-loader',
              options: { configFileName: helpers.root('src', 'tsconfig.json') }
            },
            'angular2-template-loader']
          },
          {
            test: /\.html$/,
            loader: 'html-loader'
          },
          {
            test: /\.(png|jpg|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
            loader: 'file-loader?name=assets/[name].[hash].[ext]'
          },
          {
            test: /\.css$/,
            loader: ExtractTextPlugin.extract({ loader: [{ loader: "css-loader" }, { loader: "postcss-loader" } ]})
          },
          {
            test: /\.scss$/,
            loader: ExtractTextPlugin.extract({ loader: [{ loader: "css-loader" }, { loader: "sass-loader" } ] })
          }
        ]
      },
    
      plugins: [
        new ExtractTextPlugin({ filename: 'css/[name].css', disable: false, allChunks: true }),
        // Workaround for angular/angular#11580
        new webpack.ContextReplacementPlugin(
          // The (\\|\/) piece accounts for path separators in *nix and Windows
          /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/,
          helpers.root('./src'), // location of your src
          {} // a map of your routes
        ),
    
        new webpack.optimize.CommonsChunkPlugin({
          name: ['app', 'vendor', 'polyfills']
        }),
    
        new HtmlWebpackPlugin({
          template: 'src/index.html'
        })
      ]
    };
    

    然后我在 app.component.ts 文件中添加了针对全局 css 要求的 require 语句,然后在嵌套组件上使用样式属性来实现组件特定的样式。

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 2019-01-04
      • 2017-07-04
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多