zoukankan      html  css  js  c++  java
  • 入口一次配置

    在入口多次配置基础上升级

    初始化:npm init -y   

    安装依赖:npm install --save-dev css-loader file-loader html-loader html-webpack-plugin less less-loader style-loader url-loader jquery extract-text-webpack-plugin webpack webpack-dev-server glob

    "devDependencies": {
    "css-loader": "^0.28.7",
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^1.1.6",
    "glob": "^7.1.2",
    "html-loader": "^0.5.1",
    "html-webpack-plugin": "^2.30.1",
    "jquery": "^3.2.1",
    "less": "^2.7.3",
    "less-loader": "^4.0.5",
    "style-loader": "^0.19.1",
    "uglifyjs-webpack-plugin": "^1.1.4",
    "url-loader": "^0.6.2",
    "webpack": "^3.10.0",
    "webpack-dev-server": "^2.9.7"
    }


    项目结构:
    -root
      +dist        自动生成
      +node_modules   自动生成
      -src
        +css
        +img
        +js
        +views
      package.json
      package-lock.json
      webpack.config.js

    具体结构参考 http://www.cnblogs.com/redn/p/8065913.html

    webpack.config.js 文件

    //引入需要的模块
    var path = require('path');
    var glob=require('glob');
    var webpack = require('webpack');
    var ExtractTextPlugin=require("extract-text-webpack-plugin");
    var HtmlWebpackPlugin=require("html-webpack-plugin");
    var uglifyjsPlugin=require("uglifyjs-webpack-plugin");
    var CommonsChunkPlugin=webpack.optimize.CommonsChunkPlugin;

    var entries=getEntry('src/js/page/**/*.js','src/js/page');
    var chunks=Object.keys(entries);

    var config={
    entry:{
    index:"./src/js/page/index.js",
    about:"./src/js/page/about.js",
    list:"./src/js/page/list.js"
    },
    output:{
    path:path.join(__dirname,'dist'),
    publicPath: '/dist/',
    filename:'js/[name].js',
    chunkFilename:'js/[id].chunk.js'
    },
    module:{
    loaders:[
    {
    test:/.css$/,
    loader:ExtractTextPlugin.extract({
    fallback:"style-loader",
    use:[
    {
    loader:"css-loader",
    options:{
    minimize:true
    }
    }
    ]
    })
    },{
    test:/.less$/,
    loader:ExtractTextPlugin.extract('css-loader!less-loader')
    },{
    test:/.html$/,
    loader:"html-loader?attrs=img:src img:data-src"
    },{
    test: /.(woff|woff2|ttf|eot|svg)(?v=[0-9].[0-9].[0-9])?$/,
    loader: 'file-loader?name=./fonts/[name].[ext]'
    }, {
    test:/.(png|jpg|gif)$/,
    loader:'url-loader?limit=8192&name=./img/[hash].[ext]'
    }
    ]
    },
    plugins:[
    new webpack.ProvidePlugin({
    $:'jquery'
    }),
    new CommonsChunkPlugin({
    name:'vendors',
    chunks:chunks,
    minChunks:chunks.length
    }),
    new ExtractTextPlugin('css/[name].css'),
    new HtmlWebpackPlugin({
    // favicon:'./src/img/favicon.ico',
    filename:'./views/index.html',
    template:'./src/views/index.html',
    inject:'body',
    hash:true,
    chunks:['vendors','index'],
    minify:{
    removeComments:true,
    collapseWhitespace:false
    }
    }),
    new HtmlWebpackPlugin({
    // favicon:'./src/img/favicon.ico',
    filename:'./views/about.html',
    template:'./src/views/about.html',
    inject:'body',
    hash:true,
    chunks:['vendors','about'],
    minify:{
    removeComments:true,
    collapseWhitespace:false
    }
    }),
    new HtmlWebpackPlugin({
    // favicon:'./src/img/favicon.ico',
    filename:'./views/list.html',
    template:'./src/views/list.html',
    inject:'body',
    hash:true,
    chunks:['vendors','list'],
    minify:{
    removeComments:true,
    collapseWhitespace:false
    }
    }),
    new uglifyjsPlugin(),
    new webpack.HotModuleReplacementPlugin()
    ],
    devServer:{
    contentBase:'./',
    host:'localhost',
    port:9090,
    inline:true,
    hot:true
    }
    };

    var pages=Object.keys(getEntry('src/views/**/*.html','src/views/'));
    pages.forEach(function (pathname) {
    var conf={
    filename:'./views/'+pathname+'.html',
    template:'./src/views/'+pathname+'.html',
    inject:false
    };
    if(pathname in config.entry){
    conf.favicon=path.resolve(__dirname,'src/img/favicon.ico');
    conf.inject='body';
    conf.chunks=['vendors',pathname];
    conf.hash=true
    }
    config.plugins.push(new HtmlWebpackPlugin(conf))
    });

    module.exports=config;

    function getEntry(globPath, pathDir) {
    var files=glob.sync(globPath);
    var entries={},entry,dirname,basename,pathname,extname;

    for(var i=0;i<files.length;i++){
    entry=files[i];
    dirname=path.dirname(entry);
    extname=path.extname(entry);
    basename=path.basename(entry,extname);
    pathname=path.normalize(path.join(dirname,basename));
    pathDir=path.normalize(pathDir);
    if(pathname.startsWith(pathDir)){
    pathname=pathname.substring(pathDir.length)
    }
    entries[pathname]=['./'+entry]
    }
    return entries;
    }

    package.json配置如前
    http://www.cnblogs.com/redn/p/8065913.html

    项目代码参考:https://github.com/Rednuo/webpackMuiltPage2.git


















  • 相关阅读:
    noip模拟赛 钻石
    noip模拟赛 整除
    noip模拟赛 拼不出的数
    noip模拟赛 正方形
    noip模拟赛 财富
    noip模拟赛 a
    Java基础知识强化23:Java中数据类型转换(面试题)
    Java基础知识强化22:Java中数据类型转换
    Java基础知识强化21:Java中length、length()、size()区别
    MySQL(12):windows下解决mysql忘记密码
  • 原文地址:https://www.cnblogs.com/redn/p/8073833.html
Copyright © 2011-2022 走看看