webpack 2 开发和部署技巧

webpack 开发和部署技巧

开发技巧

  • 启用source-map 出错以后就会采用source-map的形式直接显示你出错代码的位置。

    config添加

    ...
    devtool: 'eval-source-map',
    ...
  • 配置webpack-dev-server代理 (当后端server的端口或者接口不一样,可以用代理。。。mock服务也可以用代理。。。mock方法可以看我的另一篇博客→前端虚拟接口—mock的用法)

    config配置

    devServer: {
      hot: true,
      inline: true,
      //其实很简单的,只要配置这个参数就可以了
      proxy: {
        '/api/*': {
            target: 'http://localhost:5000',
            secure: false
        }
      }
    }
  • 使用preLoaders和postLoaders 检查js是否报错

    安装loader npm install jshint-loader --save-dev

    config配置
    config配置

    module: {
    ...
      //和loaders一样的语法,很简单
      perLoaders: [
          {
              test: /\.jsx?$/,
              include: APP_PATH,
              loader: 'jshint-loader'
          }
      ]
    }
    
    ...
    //配置jshint的选项,支持es6的校验
    jshint: {
    "esnext": true
    },
  • 加载jQuery plugin或者其他legacy第三方库 (目前我还没用过。。尴尬(◎-◎;))

    • 第一种方法 使用webpack.ProvidePlugin
    ...
    plugins: [
    new HtmlwebpackPlugin({
      title: 'Hello World app'
    }),
    //provide $, jQuery and window.jQuery to every script
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery",
      "window.jQuery": "jquery"
    })
    ]
    ...
    • 第二种方法 使用imports-loader

    安装laoder: npm install imports-loader --save-dev

    入口js中添加 import 'imports?jQuery=jquery!./plugin.js';


部署上线

  • 新建webpack.production.config.js 复制粘贴 webpack.config.js —-

    线上的webpack不需要dev-tools, dev-server, jshint校验等,删除相关代码。

  • package.json添加命令

    "scripts": {
    "start": "webpack-dev-server --hot --inline",
    "build": "webpack --progress --profile --colors --config webpack.production.config.js"
    },
  • 项目打包 npm run build


优化

  • 分离app.js和第三方库 (将自己的业务代码和第三方库分离)

    • 修改enrty入口文件

      entry: {
      app: path.resolve(APP_PATH, 'index.js'),
      //添加要打包在vendors里面的库
      vendors: ['jquery', 'moment']
      },
    • 添加CommonsChunkPlugin

      plugins: [
      //这个使用uglifyJs压缩你的js代码
      new webpack.optimize.UglifyJsPlugin({minimize: true}),
      //把入口文件里面的数组打包成verdors.js
      new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js'),
      new HtmlwebpackPlugin({
        title: 'Hello World app'
      })
      ]
  • 生成多页面

    • config配置

      entry: {
      //三个入口文件,app, mobile和 vendors
      app: path.resolve(APP_PATH, 'index.js'),
      mobile: path.resolve(APP_PATH, 'mobile.js'),
      vendors: ['jquery', 'moment']
      },
      output: {
      path: BUILD_PATH,
      //注意 我们修改了bundle.js 用一个数组[name]来代替,他会根据entry的入口文件名称生成多个js文件,这里就是(app.js,mobile.js和vendors.js)
      filename: '[name].js'
      },
    • 建立模板文件 index.html mobile.html 放在template文件夹中

      index.html

      <!DOCTYPE html>
      <html>
        <head>
          <title>{%= o.htmlWebpackPlugin.options.title %}</title>
        </head>
        <body>
          <h3>Welcome to webpack</h3>
        </body>
      </html>

      mobile.html

      <!DOCTYPE html>
      <html>
        <head>
          <title>{%= o.htmlWebpackPlugin.options.title %}</title>
        </head>
        <body>
          <h3>Welcome to mobile page</h3>
        </body>
      </html>
    • 配置config

      ...
      //Template的文件夹路径
      var TEM_PATH = path.resolve(ROOT_PATH, 'templates');
      ...
      plugins: [
      ...
      //创建了两个HtmlWebpackPlugin的实例,生成两个页面
      new HtmlwebpackPlugin({
        title: 'Hello World app',
        template: path.resolve(TEM_PATH, 'index.html'),
        filename: 'index.html',
        //chunks这个参数告诉插件要引用entry里面的哪几个入口
        chunks: ['app', 'vendors'],
        //要把script插入到标签里
        inject: 'body'
      }),
      new HtmlwebpackPlugin({
        title: 'Hello Mobile app',
        template: path.resolve(TEM_PATH, 'mobile.html'),
        filename: 'mobile.html',
        chunks: ['mobile', 'vendors'],
        inject: 'body'
      })
      ...
      ]
  • 生成Hash名称的script来防止缓存

    config配置

    output: {
    path: BUILD_PATH,
    //只要再加上hash这个参数就可以了
    filename: '[name].[hash].js'
    },

学习链接→Webpack傻瓜指南(二)开发和部署技巧 张轩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值