牛骨文教育服务平台(让学习变的简单)
博文笔记

webpack 基于vue package.json的配置

创建时间:2018-01-15 投稿人: 浏览次数:573
var path = require("path")
var webpack = require("webpack")
var htmlWebpackPlugin = require("html-webpack-plugin");
var cleanWebpackPlugin = require("clean-webpack-plugin");
module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    /*publicPath: "/dist/",*/  //这是我的开发环境下的;
    publicPath: "./",//这是我的生产环境下的;
    filename: "build.js"
  },
  plugins: [
 new htmlWebpackPlugin({
  title:"MobileMoney",
    filename:"index.html",
    template: "index.html",
    minify: {
      caseSensitive: false,
      collapseBooleanAttributes: true,
      collapseWhitespace: true
    },
    hash: true,
    cache: true,
    showErrors: true,
    chunks: "",
    chunksSortMode: "auto",
    excludeChunks: "",
    xhtml: false
 }),
 new cleanWebpackPlugin(["dist"])
  ],
  module: {
    rules: [
      {
        test: /.css$/,
        use: [
          "vue-style-loader",
          "css-loader"
        ],
      },
      {
        test: /.scss$/,
        use: [
          "vue-style-loader",
          "css-loader",
          "sass-loader"
        ],
      },
      {
        test: /.sass$/,
        use: [
          "vue-style-loader",
          "css-loader",
          "sass-loader?indentedSyntax"
        ],
      },
      {
        test: /.vue$/,
        loader: "vue-loader",
        options: {
          loaders: {
            // Since sass-loader (weirdly) has SCSS as its default parse mode, we map
            // the "scss" and "sass" values for the lang attribute to the right configs here.
            // other preprocessors should work out of the box, no loader config like this necessary.
            "scss": [
              "vue-style-loader",
              "css-loader",
              "sass-loader"
            ],
            "sass": [
              "vue-style-loader",
              "css-loader",
              "sass-loader?indentedSyntax"
            ]
          }
          // other vue-loader options go here
        }
      },
      {
        test: /.js$/,
        loader: "babel-loader",
        exclude: /node_modules/
      },
   {
      test: /.(eot|svg|ttf|woff|woff2)(?S*)?$/,
      loader: "file-loader",
      options: {
          name: "font/[name].[ext]?[hash]" //这也是为了打包的时候不会太乱;
      }
   },
      {
        test: /.(png|jpg|gif|svg)$/,
        loader: "file-loader",
        options: {
          limit: 10000,//小于这个的将以base64处理;
          name: "imgs/[name].[ext]?[hash]"//这也是为了打包的时候不会太乱;
        }
      }
    ]
  },
  resolve: {
    alias: {
      "vue$": "vue/dist/vue.esm.js"
    },
    extensions: ["*", ".js", ".vue", ".json"]
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true,
    overlay: true,
    port: 9000 //改端口
  },
  performance: {
    hints: false
  },
  devtool: "#eval-source-map"
}

if (process.env.NODE_ENV === "production") {
  module.exports.devtool = "#source-map"
  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: ""production""
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}
2018年4月28号,我做了一些改进会更好:
var path = require("path");
var webpack = require("webpack");
var HtmlWebpackPlugin = require("html-webpack-plugin");
var CleanWebpackPlugin = require("clean-webpack-plugin");
var CopyWebpackPlugin = require("copy-webpack-plugin");
module.exports = {
    entry: {
	    app: ["babel-polyfill", "./src/main.js"]
    },
    output: {
        path: path.resolve(__dirname, "./dist"),
        filename: "build.[hash].js"
    },
    plugins:[
	    new HtmlWebpackPlugin({
	      title:"Space时空-项目管理系统",
	      template:"./index.html",
	      inject :true,
	      minify: { //压缩HTML文件
	        removeComments: true, //移除HTML中的注释
	        collapseWhitespace: true //删除空白符与换行符
	      }
	    }),
	    new CleanWebpackPlugin(["dist"]),
	    // 复制 static
	    new CopyWebpackPlugin([
	      {
	        from: __dirname+"/static",
	        to: __dirname+"/dist/static",
	        ignore: [".*"]
	      }
	    ])
    ],
    module: {
        rules: [
            {
                test: /.vue$/,
                loader: "vue-loader",
                options: {
                    loaders: {
                        // Since sass-loader (weirdly) has SCSS as its default parse mode, we map
                        // the "scss" and "sass" values for the lang attribute to the right configs here.
                        // other preprocessors should work out of the box, no loader config like this necessary.
                        "scss": "vue-style-loader!css-loader!sass-loader",
                        "sass": "vue-style-loader!css-loader!sass-loader?indentedSyntax"
                    }
                    // other vue-loader options go here
                }
            },
            {
                test: /.js$/,
                loader: "babel-loader",
                exclude: /node_modules/
            },
            {
                test: /.css$/,
                loader: "style-loader!css-loader"
            },
            {
                test: /.(eot|svg|ttf|woff|woff2)(?S*)?$/,
                loader: "file-loader",
                query:{
		          name:"fonts/[name].[hash:7].[ext]"
		        }
            },
            {
                test: /.(png|jpe?g|gif|svg)(?S*)?$/,
                loader: "file-loader",
                query: {
                    name: "img/[name].[ext]?[hash]"
                }
            }
        ]
    },
    resolve: {
        alias: {
            "vue$": "vue/dist/vue.esm.js"
        }
    },
    devServer: {
        historyApiFallback: true,
        noInfo: true,
        overlay: true,
        contentBase:"./"
    },
    performance: {
        hints: false
    },
    devtool: "#eval-source-map"
}

if (process.env.NODE_ENV === "production") {
    module.exports.devtool = "#source-map";
    // http://vue-loader.vuejs.org/en/workflow/production.html
    module.exports.plugins = (module.exports.plugins || []).concat([
        new webpack.DefinePlugin({
            "process.env": {
                NODE_ENV: ""production""
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            sourceMap: false,
            compress: {
                warnings: false,
                drop_debugger: true,
    			drop_console: true
            }
        }),
        new webpack.LoaderOptionsPlugin({
            minimize: true
        })
    ])
}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。