webpack学习笔记(四)

1 webpack的垫片

举个例子,在main文件中引入jquery和doash两个库:

import $ from 'jquery';
import _ from 'lodash';
import { ui } from './jquery.ui.js';
ui();

对应的jquery.ui.js比如说是一个第三方库,很有可能是在 node_module中:

export function ui(){
  $('body').css('background', _.join(['green'],''));
}

由于webpack打包是基于模块的,每个模块之间也是相互独立的,所以在main中引入的jquery 在 jquery.ui.js中无法使用的,故需要在webpack的配置文件中做一下操作:

import webpack from 'webpack'
{
  plugins:[
    new webpack.ProvidePlugin({
      $:'jquery',
      _:'lodash'
    })
  ]
}

2 this指代window

因为默认的this是指向当前模块的,所以为了让this指向window,需要安装: npm install imports-loader --save-dev 

webpack最初对js只有一个loader的时候:

{
  module:{
    rules:[
      {
        test:/\.js$/,
        exclude:/node_modules/,
        loader:'babel-loader'
      }
    ]
  }
}

而有多个loader的时候,使用下面方式:

{
  module:{
    rules:[
      {
        test:/\.js$/,
        exclude:/node_modules/,
        use:[{
          loader:'babel-loader'
        },{
          loader:'imports-loader?this=>window'
        }
        ] 
      }
    ]
  }
}

这样对于js文件,先使用imports-loader把this指向了window 再使用babel-loader 编译js文件,莫要忘记babelrc配置文件。

3 环境变量

已知webpack的配置文件目录如下:

-build
  -webpack.common.js
  -webpack.dev.js
  -webpack.prod.js

分别在dev和prod中使用了webpack-merge对配置文件进行的合并,在这里我们使用命令行中传入环境变量的形式,则dev和prod中只导出自己的配置项,不再引入merge:

此时comm.js中引入merge,如下所示:

const merge = require('webpack-merge');
const devConfig = require('./webpack.dev.js');
const prodConfig = require('./webpack.prod.js');

const commonConfig = {
  entry:{},
  output:{},
  plugin:{},
  module:{}
  ...
}

module.exports = (env) => {
  if(env && env.production){
    return merge( commonConfig ,prodConfig);
  }else{
    return merge( commonConfig ,devConfig);
  }
}

对应的命令行配置中,config.json

{
  "scripts":{
    "dev":"webpack-dev-server --config ./build/webpack.common.js",
    "build":"webpack --env.profuction --config ./build/webpack.common.js",//均运行common文件,并且定义了环境变量
  }
}

 

posted @ 2019-04-06 16:12  小猪冒泡  阅读(189)  评论(0编辑  收藏  举报