Webpack前端项目打包配置

2018-07-08  本文已影响0人  Brandon_x

前提

全局环境下安装 nodejs

使用

1、安装依赖包

如果项目没有npm管理,即没有package.json文件

初始化项目为nodejs项目

npm init

cnpm install webpack --save -dev

cnpm install style-loader css-loader svg-url-loader url-loader file-loader font-awesome-webpack postcss-webpack --save -dev

 {
         test: /\.css$/,
         loader: ExtractTextPlugin.extract({
               fallback: "style-loader",
               use: "css-loader"
         })
},
 {
                test: /\.(svg|eot|woff|ttf)\w*/,
                loader: 'file-loader?outputPath=fonts/&name=[name].[ext]'
},
{
                test: /\.(png|jpg|gif)$/,
                loader: 'url-loader?limit=8192&name=css/images/[name].[ext]'
},
{
                test: /\.xsl$/,
                loader: "file-loader?name=[name].[ext]"
}

如果项目已经被npm管理,即包含package.json文件
直接安装所有依赖

cnpm install

2、配置文件 webpack.config.js

引入各种需要的js和css等文件

require('./js/lib/jquery/jquery.js');
require('./js/lib/jquery/jquery-1.9.1.min.js');
require('./js/lib/jquery/jquery.colorbox.js');

require('./js/common/common.js');
require('./js/main.js');
require('./js/carousel.js');
// require('./js/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML');

require('./css/iconfont.css');
require('./css/colorbox.css');
require('./css/by.css');
require('./css/jo-dhh.css');

require('./xslt/jats2html.xsl');

var webpack = require("webpack");

__dirname为当前目录

entry: {
        index: __dirname + "/index.js",
        // vendor:['jQuery'],
    },
    output: {
        path: __dirname + "/dist",
        //打包后的文件存放的地方
        filename: "bundle.js"
    },

var ExtractTextPlugin = require("extract-text-webpack-plugin");

在module中的loader参数中,对css的处理部分修改为

{
                test: /\.css$/,
                loader: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                })
},

在plugins中添加css文件打包后的输出路径和文件名

new ExtractTextPlugin("style.css")

说明:这里如果不将参数格式显示设置为fallback,use格式,后面在打包时会报css文件错误

图片有三种处理方式,一种图片是在css中被设置为背景样式,这里可以直接识别并放入目标文件夹;

{
                test: /\.(png|jpg|gif)$/,
                loader: 'file-loader?name=images/[name].[ext]'
},

另一种是在html中通过img标签的src引入,因为webpack对html支持不友好,所以需要借助插件html-webpack-plugin

第三种是借用拷贝插件,直接强行拷贝所有图片,因为本项目图片是在xslt中引用,所以采用第三种和第一种结合的方式处理图片,在plugin参数中添加

new CopyWebpackPlugin([
            {
                from: 'css/images',
                to: 'images'
            },
            {
                from: 'xmlsample',
                to: 'xmlsample'
            },
            {
                from: 'js/MathJax',
                to: 'MathJax'
            }

]),

这里需要注意:字体文件的css样式和其余资源文件的路径对应问题

如果css是与其余的css一起打包,那么其中对fonts资源的引用路径也会自动发生变化,一定注意,是个大坑!!

{
                test: /\.(svg|eot|woff|ttf)\w*/,
                loader: 'file-loader?outputPath=fonts/&name=[name].[ext]'
            },
{
                test: /\.xsl$/,
                loader: "file-loader?name=[name].[ext]"
}

devtool: 'source-map',

var CopyWebpackPlugin = require("copy-webpack-plugin");

new CopyWebpackPlugin([
            {
                from: 'css/images',
                to: 'images'
            },
            {
                from: 'xmlsample',
                to: 'xmlsample'
            },
            {
                from: 'js/MathJax',
                to: 'MathJax'
            }

        ]),

懒惰才是最大生产力哈哈哈

var CleanWebpackPlugin = require("clean-webpack-plugin");

new CleanWebpackPlugin(
            ['dist'],
            {
                root: __dirname,                 //根目录
                verbose: true,                  //开启在控制台输出信息
                dry: false                  //启用删除文件
            })
var webpack = require("webpack");
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var CopyWebpackPlugin = require("copy-webpack-plugin");
var CleanWebpackPlugin = require("clean-webpack-plugin");

module.exports = {
    entry: {
        index: __dirname + "/index.js",
        // vendor:['jQuery'],
    },
    output: {
        path: __dirname + "/dist",
        //打包后的文件存放的地方
        filename: "bundle.js"
    },
    module: {
        loaders: [
            {
                test: /\.css$/,
                loader: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                })
            },
            // [hash:8]
            // {
            //     test: /\.(png|jpg|gif)$/,
            //     loader: 'url-loader?limit=8192&name=css/images/[name].[ext]'
            // },
            {
                test: /\.(png|jpg|gif)$/,
                loader: 'file-loader?name=images/[name].[ext]'
            },
            {
                test: /\.(svg|eot|woff|ttf)\w*/,
                loader: 'file-loader?outputPath=fonts/&name=[name].[ext]'
            },
            {
                test: /\.xsl$/,
                loader: "file-loader?name=[name].[ext]"
            }
        ]
    },
    devtool: 'source-map',
    plugins: [
        new ExtractTextPlugin("style.css"),
        // new webpack.optimize.CommonsChunkPlugin({
        //     names: ['vendor', 'manifest'],
        // }),
        new CopyWebpackPlugin([
            {
                from: 'css/images',
                to: 'images'
            },
            {
                from: 'xmlsample',
                to: 'xmlsample'
            },
            {
                from: 'js/MathJax',
                to: 'MathJax'
            }

        ]),
        new CleanWebpackPlugin(
            ['dist'],
            {
                root: __dirname,                 //根目录
                verbose: true,                  //开启在控制台输出信息
                dry: false                  //启用删除文件
            })
    ]
}
上一篇 下一篇

猜你喜欢

热点阅读