美文网首页
vue+webpack 多页面配置

vue+webpack 多页面配置

作者: 小枫学幽默 | 来源:发表于2019-04-08 14:01 被阅读0次

    其实多页面的根本就是 webpack多入口和HtmlWebpackPlugin的多页面输出

    要生成的多页面配置(pageConfig.js)

    module.exports=[
      {
        entry_name:"login",
        title:"爱问医生-登录"
      },
      {
        entry_name:"register",
        title:"爱问医生-注册"
      },
      {
        entry_name:"pw_retrieve",
        title:"爱问医生-找回密码"
      },
      {
        entry_name:"user_edit",
        title:"爱问医生-个人信息"
      }
    ];
    

    生成多入口【build\webpack.base.conf.js】

    var appPageArr = require("../src/pageConfig");
    var configEntry = {};
    appPageArr.forEach((page) => {
      configEntry[page.entry_name] =`./src/pages/${page.entry_name}.js`;
    });
    
    module.exports = {
      entry: configEntry,
      output: {
        path: config.build.assetsRoot,
        filename: "[name].js",
        publicPath: process.env.NODE_ENV === "production"
          ? config.build.assetsPublicPath
          : config.dev.assetsPublicPath
      },
      ...
    }
    
    

    开发服务器生成多页面

    //多入口生成
    var appPageArr = require("../src/pageConfig");
    
    //生成多个html文件
    var configHtmlWebpackPlugin = [];
    appPageArr.forEach((page) => {
      configHtmlWebpackPlugin.push(new HtmlWebpackPlugin({
        chunks:["manifest", "vendor",page.entry_name],
        filename: page.entry_name+".html",
        title: page.title,
        template: "index.html",
        inject: true
      })
     );
    });
    
    
    //===========================
    module.exports = merge(baseWebpackConfig, {
      module: {
        rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
      },
      // cheap-module-eval-source-map is faster for development
      devtool: "#cheap-module-eval-source-map",
      plugins: [
        new webpack.DefinePlugin({
          "process.env": config.dev.env
        }),
        // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoEmitOnErrorsPlugin(),
        // https://github.com/ampedandwired/html-webpack-plugin
        ...configHtmlWebpackPlugin,
        new FriendlyErrorsPlugin()
      ]
    });
    

    打包配置(打包成多个文件)

    var appPageArr = require("../src/pageConfig");
    var configHtmlWebpackPlugin = [];
    appPageArr.forEach((page) => {
      configHtmlWebpackPlugin.push(new HtmlWebpackPlugin({
        chunks:["manifest", "vendor",page.entry_name],
        filename: page.entry_name+".html",
        template: "index.html",
        title: page.title,
        inject: true,
        minify: {
          removeComments: true,
          collapseWhitespace: true,
          removeAttributeQuotes: true
          // more options:
          // https://github.com/kangax/html-minifier#options-quick-reference
        },
        // necessary to consistently work with multiple chunks via CommonsChunkPlugin
        chunksSortMode: "dependency"
      })
     );
    });
    
    
    //接下来引用
    var webpackConfig = merge(baseWebpackConfig, {
      module: {
        rules: utils.styleLoaders({
          sourceMap: config.build.productionSourceMap,
          extract: true
        })
      },
      devtool: config.build.productionSourceMap ? "#source-map" : false,
      output: {
        path: config.build.assetsRoot,
        filename: utils.assetsPath("js/[name].[chunkhash].js"),
        chunkFilename: utils.assetsPath("js/[id].[chunkhash].js")
      },
      plugins: [
        // http://vuejs.github.io/vue-loader/en/workflow/production.html
        new injectScriptPlugin({
          paths: [],
          condition: "<!-- codeInject -->",
          injectCode: "<script>var __init_res_code= '${res.code}';var __init_res_msg= '${res.msg}';</script>"
        }),
        new webpack.DefinePlugin({
          "process.env": env
        }),
        new webpack.optimize.UglifyJsPlugin({
          compress: {
            warnings: false
          },
          sourceMap: true
        }),
        // extract css into its own file
        new ExtractTextPlugin({
          filename: utils.assetsPath("css/[name].[contenthash].css")
        }),
        // Compress extracted CSS. We are using this plugin so that possible
        // duplicated CSS from different components can be deduped.
        new OptimizeCSSPlugin({
          cssProcessorOptions: {
            safe: true
          }
        }),
        // generate dist index.html with correct asset hash for caching.
        // you can customize output by editing /index.html
        // see https://github.com/ampedandwired/html-webpack-plugin
        ...configHtmlWebpackPlugin,
        // split vendor js into its own file
        new webpack.optimize.CommonsChunkPlugin({
          name: "vendor",
          minChunks: function (module, count) {
            // any required modules inside node_modules are extracted to vendor
            return (
              module.resource &&
              /\.js$/.test(module.resource) &&
              module.resource.indexOf(
                path.join(__dirname, "../node_modules")
              ) === 0
            );
          }
        }),
        // extract webpack runtime and module manifest to its own file in order to
        // prevent vendor hash from being updated whenever app bundle is updated
        new webpack.optimize.CommonsChunkPlugin({
          name: "manifest",
          chunks: ["vendor"]
        }),
        // copy custom static assets
        new CopyWebpackPlugin([
          {
            from: path.resolve(__dirname, "../static"),
            to: config.build.assetsSubDirectory,
            ignore: [".*"]
          }
        ])
      ]
    });
    

    相关文章

      网友评论

          本文标题:vue+webpack 多页面配置

          本文链接:https://www.haomeiwen.com/subject/reortftx.html