@Masterstvo

Как подружить Angular и Webpack?

Добрый день!

Разбираюсь со сборкой Angular проекта под Webpack. Нашел статью в которой описывается как подружить эти две технологии ( https://metanit.com/web/angular2/9.1.php ). В принципе, на сайте с офф документацией примерно то же самое.

Загвоздка для меня состоит в том, что я не могу понять почему в сборку входят только js и html файлы??? Допустим у меня есть картинки, или я хочу глобально подключить css, или протестировать взаимодействие с сервером, создав json c данными (не импортируя его нигде в проекте). Как мне сделать так чтоб некоторые файлы тоже входили в эту сборку (ну хотя бы обычным копированием посредством webpack)? Говорили, что webpack не прост, но я не верил )

Мой webpack-конфиг:
var webpack = require('webpack');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var path = require('path');

module.exports = {
    entry: {
        'polyfills': './src/polyfills.ts',
        'vendor': './src/vendor.ts',
        'app': './src/app/main.ts'
    },
    output: {
        path: path.resolve('dist'),
        publicPath: '/',
        filename: '[name].[hash].js'
    },
    resolve: {
        extensions: ['.ts', '.js', '.json']
    },

    module: {
        rules: [
            {
                test: /\.ts$/,
                loaders: [{
                    loader: 'awesome-typescript-loader',
                    options: { configFileName: path.resolve('tsconfig.json') }
                } , 'angular2-template-loader']
            },
            {
                test: /\.html$/,
                loader: 'html-loader'
            },
            {
                test: /\.json$/,
                loader: 'json-loader'
            },
            {
                test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
                loader: 'file-loader?name=assets/[name].[hash].[ext]'
            },
            {
                test: /\.css$/,
                exclude: path.resolve('src', 'app'),
                loader: ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader?sourceMap' })
            },
            {
                test: /\.css$/,
                include: path.resolve('src', 'app'),
                loader: 'raw-loader'
            }]
    },

    plugins: [
        new webpack.ContextReplacementPlugin(
            /angular(\|\/)core(\|\/)(esm(\|\/)src|src)(\|\/)linker/,
            path.resolve('./src'), // каталог с исходными файлами
            {} // карта маршрутов
        ),

        new webpack.optimize.CommonsChunkPlugin({
            name: ['app', 'vendor', 'polyfills']
        }),

        new HtmlWebpackPlugin({
            template: 'src/index.html'
        }),
        new ExtractTextPlugin('[name].[hash].css'),
        new webpack.NoEmitOnErrorsPlugin(),

        new webpack.optimize.UglifyJsPlugin({
            mangle: {
                keep_fnames: true
            }
        }),

        new webpack.LoaderOptionsPlugin({
            htmlLoader: {
                minimize: false
            }
        })
    ]
};


Структура проекта следующая:
e1c8714589a945a4be558479ee20711d.PNG

При сборке в dist собирается так (4 файла):
63ca5c363e24410ebaf0dc519f4905bc.PNG

Что мне нужно поменять или добавить, чтоб в итоговой сборке были ещё папочки css, fonts, img из app? Вроде обработка в модулях (в конфиге) этих файлов есть, а по факту они не генерятся!

Заранее спасибо!
  • Вопрос задан
  • 1231 просмотр
Решения вопроса 1
alexiusp
@alexiusp
senior frontend developer
Для включения файлов (css etc.) в имеющийся проект достаточно их где-то импортировать. Если речь идёт о так называемых ассетах (изображения, шрифты и т.д.) то нужно для этого дополнительный вебпаковский плагин поставить. Не могу на вскидку вспомнить как он называется, но что-то с копированием файлов связано. По-моему в последних версиях ангуляра он идёт в комплекте по умолчанию. В ионике он точно есть. Он просто копирует все файлы из определённой папки (assets) src в такую же папку в dist.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alex-zaytseff
Full stack web developer
не совсем по сути вопроса, но можно посмотреть на cli.angular.io
Собственно помимо консольных команд для сборки проекта используется webpack. Все запускается фактически из коробки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы