资讯专栏INFORMATION COLUMN

webpack——一站到底二

王笑朝 / 2537人阅读

摘要:续一一站到底启动一个本地服务下载全局安装不在插件里多带带当然也可以配置代理在文件头添加注释定义环境变量从命令行环境获取参数定义浏览器中的替换的变量为但是如果打包完文件体积还是太大怎么办呢我们可以用另外一个插件设置但是页面必须引入分析

续webpack一——一站到底
(7)webpack-dev-server 启动一个本地服务

  下载:npm i webpack-dev-server -g  //全局安装
  不在插件里 多带带
  devServer: {
      host:"localhost",
      port:4000,
      contentBase:_dirname + "/dev"
  }
  当然也可以配置代理
  proxy: {
      "/api":{
          target: "http://localhost",
          changeOrigin:true,
          pathRewrite: {
              "^/vip": ""
          }
      }
  }

(8)webpack.BannerPlugin 在文件头添加注释
(9)webpack.DefinePlugin 定义环境变量

const webpack = require("webpack");
const NODE_ENV = process.env.NODE_ENV; // 从命令行环境获取 NODE_ENV 参数
module.exports = {
    plugins: [
        new webpack.DefinePlugin({
            "process.env": {
                "NODE_ENV": JSON.stringify(NODE_ENV)
            } // 定义浏览器中的替换的变量为 `process.env.NODE_ENV`
        })
    ]
}

(10)但是如果打包完文件体积还是太大怎么办呢?

我们可以用另外一个插件CommonsChunkPlugin
设置:
{
  entry: {
   bundle: "app"
    vendor: ["app"]
  }

  plugins: {
    new webpack.optimize.CommonsChunkPlugin("vendor",  "vendor.js")
  }
}   
但是页面必须引入
 
 

(11) 分析打包后项目用到的各种包的大小 webpack-visualizer-plugin

var Visualizer = require("webpack-visualizer-plugin");

//...
plugins: [new Visualizer({
  filename: "./statistics.html"
})],
//... 
其他

1.版本号控制

下载htmlwebpackplugin插件
getPath("[name]@[chunkhash:6].css")
css 和 js 多 chrunk
// 生成抽离文本文件插件的实例
    new ExtractTextPlugin({
      filename: (getPath)=>{
        return getPath("[name]@[chunkhash:6].css").replace("scripts", "styles")
      },
      allChunks: true
    }),

2.devtool: "source-map" 源码映射 方便开发时调试代码
3.环境变量配置(mac)

设置:
    >cd ~/.profile
    >node
    >process.env
  出去  >export NODE_ENV=production   //配置环境变量
       //查看
       >node
       >process.env.NODE_ENV   => "production"
 window下是 set NODE_ENV=production
 
 然后在package.json下
 “script”: {
     "dev": "export NODE_ENV=dev && webpack && webpack-dev-server",
     "build": "export NODE_ENV=prod && webpack"
 }
 然后在config.js中针对环境进行判断 打包
 
三、安装
npm i webpack -g
四、配置
webpack.config.js,同gulpfile.js和Gruntfile.js一样,就是配置项 
五、可实施的配置
// 引入webpack
var webpack = require("webpack")

// 引入文本抽离插件
var ExtractTextPlugin = require("extract-text-webpack-plugin")

// 引入html生成插件
var HtmlWebpackPlugin = require("html-webpack-plugin")

// 引入openBrowser 插件
var OpenBrowserPlugin = require("open-browser-webpack-plugin")

var outputDir = ""

if (process.env.NODE_ENV === "dev") {
  outputDir = "/dev"
} else {
  outputDir = "/prod"
}

var public = {
  // 配置入口
  entry: {
    "scripts/app": "./src/scripts/app.js",
    "scripts/search": "./src/scripts/search.js"
  },

  // 配置出口
  output: {
    filename: "[name]@[chunkhash:6].js",
    path: __dirname + outputDir  // 必须是绝对路径
  },

  // devtool 配置
  devtool: "source-map",

  // 配置模块
  module: {
    rules: [
      // 解析ES6+
      {
        test: /.js$/,
        exclude: /node_modules/, // 排除node_modules下.js的解析
        use: [
          {
            loader: "babel-loader" // 应用babel-loader解析ES6+
          }
        ]
      },

      // 加载scss
      {
        test: /.scss$/,
        use:
        //[
          // { loader: "style-loader" },
          // { loader: "css-loader" },
          // { loader: "sass-loader" }
        //]
        // CSS抽离
          ExtractTextPlugin.extract({
            fallback: "style-loader",
            use: ["css-loader", "sass-loader"]
          })
      },

      // 加载css
      {
        test: /.css$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" }
        ]
      },

      // 加载图片
      {
        test: /.(png|jpe?g|gif|svg)(?.*)?$/,
        loader: "url-loader",
        options: {
          limit: 1000,
          name: "media/images/[name].[hash:7].[ext]"
        }
      },

      // 加载媒体文件
      {
        test: /.(mp4|webm|ogg|mp3|wav|flac|aac)(?.*)?$/,
        loader: "url-loader",
        options: {
          limit: 10000,
          name: "media/mp4/[name].[hash:7].[ext]"
        }
      },

      // 加载iconfont
      {
        test: /.(woff2?|eot|ttf|otf)(?.*)?$/,
        loader: "url-loader",
        options: {
          limit: 10000,
          name: "media/iconfont/[name].[hash:7].[ext]"
        }
      }
    ]
  },

  // 配置插件
  plugins: [
    // 生成抽离文本文件插件的实例
    new ExtractTextPlugin({
      filename: (getPath)=>{
        return getPath("[name]@[chunkhash:6].css").replace("scripts", "styles")
      },
      allChunks: true
    }),

    // 生成编译HTML(index.html)的插件的实例
    new HtmlWebpackPlugin({
      template: "./src/index.html",
      filename: "index.html",
      chunks: ["scripts/app"]
    }),

    // 生成编译HTML(search.html)的插件的实例
    new HtmlWebpackPlugin({
      template: "./src/search.html",
      filename: "search.html",
      chunks: ["scripts/search"]
    }),

    // 代码压缩
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      },
      output: {
        comments: false
      }
    }),

    // 自动在打开浏览器打开页面
    // new OpenBrowserPlugin({
    //   url: "http://localhost:4000"
    // })
  ]
}

var devserver = { // 配置webserver
  devServer: {
    host: "localhost",
    port: 4000,
    contentBase: __dirname + outputDir,
    noInfo: true,
    proxy: {
      "/api": {
        target: "https://api.douban.com/",
        changeOrigin: true,
        pathRewrite: {
          "^/api": ""
        }
      },
      "/vip": {
        target: "http://localhost:9000/",
        changeOrigin: true,
        pathRewrite: {
          "^/vip": ""
        }
      }
    }
  }
}

if (process.env.NODE_ENV === "dev") {
  module.exports = Object.assign({}, public, devserver)
} else {
  module.exports = public
}
webpack1到webpack3的时候 loader加载格式更改
style-loader必须写到fallback属性上,版本1的时候直接loader:"style-loader!css-loader"
希望对大家有帮助!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90299.html

相关文章

  • webpack——一站到底

    摘要:入门在逐渐成为一个成熟的青年路上,一直备受大家青睐,然而还在不断的健身,希望以最好的姿态呈现给各位,如今他已经。比起又强化骨骼,变得更坚实。 webpack入门 webpack在逐渐成为一个成熟的青年路上,一直备受大家青睐, 然而还在不断的健身,希望以最好的姿态呈现给各位,如今他已经v3。 比起1 、2又强化骨骼,变得更坚实。 一、什么是webpack 官方给出: Webpa...

    dack 评论0 收藏0
  • 当我们谈重构的时候我们想谈什么?

    摘要:等研发介入时,现场已经不复存在。因此,我要求戒律一凡是中间件,不管是自主研发的,还是以开源软件为内核构建出来的,都必须自带监控报警,否则不允许上线。 郑昀(公众号:老兵笔记) 20180411 showImg(https://segmentfault.com/img/bV8BWp?w=999&h=559); 如果你在繁忙的业务迭代中开始系统重构,恭喜你,说明你的业务已经完成了从0到1,...

    junbaor 评论0 收藏0
  • 让你的 webpack sass 和 css 处理性能 10 倍提升

    摘要:是的你没有听错今天介绍的两款能让你的在处理和时性能提升倍以上他们分别是看名字就知道它们相比官方版本的要更快那到底有多快下面给个性能对比性能对比以上的文件测试结果如下可以看到的性能远高于并且由于去重功能其打包的体积更 是的, 你没有听错, 今天介绍的两款 loader 能让你的 webpack 在处理 sass 和 css 时性能提升 10 倍以上, 他们分别是: fast-sass-...

    张汉庆 评论0 收藏0
  • 7月份前端资源分享

    摘要:更多资源请文章转自月份前端资源分享的作用数组元素随机化排序算法实现学习笔记数组随机排序个变态题解析上个变态题解析下中的数字前端开发笔记本过目不忘正则表达式聊一聊前端存储那些事儿一键分享到各种写给刚入门的前端工程师的前后端交互指南物联网世界的 更多资源请Star:https://github.com/maidishike... 文章转自:https://github.com/jsfr...

    pingan8787 评论0 收藏0
  • 前端每周清单第 45 期: Safari 支持 Service Worker, Parcel 完整教

    摘要:的另一个核心特性,苹果表示也正在开发中,按开发进度可能几个月后就能与我们见面。是基于的本地化数据库,支持以及浏览器环境。 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎关注【前端之巅】微信公众号(ID: frontshow),及时获取前端每周清单。 本期是 2017 年的最后一...

    赵春朋 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<