首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2: Scss不会在生产中装载webpack

角2: Scss不会在生产中装载webpack
EN

Stack Overflow用户
提问于 2017-06-01 22:14:43
回答 1查看 1.1K关注 0票数 1

在开发模式下,所有工作都很好:

在生产中:

我的webpack.config.common.js:

代码语言:javascript
复制
var webpack = require('webpack');

module.exports = {
    entry: {
        'app': './assets/app/main.ts'
    },

    resolve: {
        extensions: ['.js', '.ts']
    },

    module: {
        rules: [
            {
                test: /\.html$/,
                use: [{ loader: 'html-loader' }]
            },
            {
                test: /\.css$/,
                use: [{ loader: 'raw-loader' }]
            },
            {
                test: /\.scss$/,
                exclude: /node_modules/,
                loaders: ['raw-loader', 'sass-loader'] 
            }
        ],
        exprContextCritical: false

    }
};

webpack.config.dev.js:

代码语言:javascript
复制
var path = require('path');

var webpackMerge = require('webpack-merge');
var commonConfig = require('./webpack.config.common.js');

module.exports = webpackMerge(commonConfig, {
    devtool: 'cheap-module-eval-source-map',

    output: {
        path: path.resolve(__dirname + '/public/js/app'),
        publicPath: "/js/app/",
        filename: 'bundle.js',
        chunkFilename: '[id].chunk.js'
    },
    module: {
        rules: [
            {
                test: /\.ts$/,
                use: [
                    {loader: 'awesome-typescript-loader', options: {
                        transpileOnly: true
                    }},
                    {loader: 'angular2-template-loader'},
                    {loader: 'angular-router-loader'}
                ]
            }
        ]

    }
});

webpack.config.prod.js:

代码语言:javascript
复制
var path = require('path');

var webpack = require('webpack');
var webpackMerge = require('webpack-merge');
var commonConfig = require('./webpack.config.common.js');

module.exports = webpackMerge.smart(commonConfig, {
    entry: {
        'app': './assets/app/main.aot.ts'
    },

    output: {
        path: path.resolve(__dirname + '/public/js/app'),
        filename: 'bundle.js',
        publicPath: '/js/app/',
        chunkFilename: '[id].[hash].chunk.js'
    },

    module: {
        rules: [
            {
                test: /\.ts$/,
                use: [
                    'awesome-typescript-loader',
                    'angular2-template-loader',
                    'angular-router-loader?aot=true'
                ]
            }
        ]
    },

    plugins: [
        new webpack.optimize.UglifyJsPlugin({
            sourceMap: false
        })
    ]
});

Package.json中的脚本:

代码语言:javascript
复制
  "scripts": {
    "start": "node ./bin/www",
    "build": "del-cli public/js/app && webpack --config webpack.config.dev.js --progress --profile --watch",
    "build:prod": "del-cli public/js/app && ngc -p tsconfig.aot.json && ngc -p tsconfig.aot.json && webpack --config webpack.config.prod.js --progress --profile --bail && del-cli 'public/js/app/**/*.js' 'public/js/app/**/*.js.map' '!public/js/app/bundle.js' '!public/js/app/*.chunk.js' 'assets/app/**/*.ngfactory.ts' 'assets/app/**/*.shim.ts' 'assets/app/**/*.ngsummary.json' 'assets/app/**/*.ngstyle.ts'",
    "build:sass": "node-sass assets/app/ -o assets/app",
    "watch:sass": "npm run build:sass && node-sass assets/app/ -wo assets/app/"
  }

最后,一个导入.ts文件中的样式的示例:

代码语言:javascript
复制
styleUrls: ['./auth.component.scss','../common/common.scss']

显然我打电话给脚本是为了编译scss,之前.

有人看到了什么不对劲或遗漏了什么吗?谢谢

更新:在开发中工作是因为手表是活动的,webpack正在运行(或者类似的东西,因为我可以在chrome的开发人员栏中看到),如果我没有使用它就无法运行css。

更新2:

我找到了一种让它在生产中工作的方法,但是它在开发中崩溃了:

代码语言:javascript
复制
var webpack = require('webpack');

const ExtractTextPlugin = require("extract-text-webpack-plugin");
const extractSass = new ExtractTextPlugin({
    filename: "bundle.css",
    disable: process.env.NODE_ENV === "development"
});

module.exports = {
    entry: {
        'app': './assets/app/main.ts'
    },

    resolve: {
        extensions: ['.js', '.ts']
    },

    module: {
        rules: [
            {
                test: /\.html$/,
                use: [{ loader: 'html-loader' }]
            },
            {
                test: /\.css$/,
                use: [{ loader: 'raw-loader' }]
            },
            {
                test: /\.scss$/,
                use: extractSass.extract({
                    use: [{
                        loader: "css-loader"
                    }, {
                        loader: "sass-loader"
                    }],
                    fallback: "style-loader"
                })
            }],
        exprContextCritical: false
    },
    plugins: [
        extractSass
    ]
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-02 20:02:04

已解决:

只需导入SCSS文件,而不是使用"styleUrls“到组件。因此,它在开发和生产中都是有效的。

代码语言:javascript
复制
import './auth.component.scss';
import '../common/common.scss';

@Component({
  selector: 'tep-auth',
  templateUrl: './auth.component.html'
  providers: []
})

备注:

1)在生产过程中,我创建了一个Css包(参见Webpack配置)。

2)将包导入视图中是必要的,就像我们处理普通css文件一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44317923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档