1. 程式人生 > >webpack開發案例(一)

webpack開發案例(一)

sele tle 參數說明 logs css 直接 [] ima -128

案例一(基本打包)

基本前置條件

技術分享圖片

技術分享圖片

步驟一:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <body>
    <input type="text" id="v1" /> +
    <input type="text" id="v2" />
    <input type="button" id="bt" value="=" />
<input type="text" id="res" /> <script src="被打包的文件"></script> </body> </html>

步驟二:

calc.js

// 1.0定義add方法
function add(x, y) {
  return x + y;
}

// 2.0導出add方法
module.exports = add;

步驟三:

main.js

// 1.0獲取dom對象
var v1 = document.querySelector("#v1");
var v2 = document.querySelector("#v2");
var bt = document.querySelector("#bt"); var res = document.querySelector("#res"); bt.onclick = function() { // 2.0獲取calc.js中的add方法並且調用結果 var v1value = parseFloat(v1.value); var v2value = parseFloat(v2.value); // 3.0調用add方法 var add = require(‘./calc.js‘); res.value = add(v1value, v2value); }

步驟四:

技術分享圖片

案例二(使用webpack.config.js配置)

基本前置條件

技術分享圖片

技術分享圖片

與案例一相比,index.htm(js文件引入路徑要改變)、calc.js和main.js內容不變,僅僅只是多了個webpack.config.js配置文件,並且改變相關文件的路徑

webpack.config.js

module.exports = { entry: ‘./src/main.js‘, //指定打包的入口文件 output: { path: __dirname + ‘/dist‘, //輸出路徑 filename: ‘build.js‘ //輸出文件名 } }

這次打包方便了很多,直接輸入webpack即可

技術分享圖片

案例三(webpack中的loader)

步驟一:創建package.json文件

技術分享圖片

步驟二:安裝css-loader和style-loader到項目中,同時將其配置到package.json

技術分享圖片

此時package.json文件的內容為

{
  "name": "vue",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "fengxiong",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^0.28.7",
    "style-loader": "^0.19.1"
  }
}

步驟三:創建一個靜態文件,存放css

技術分享圖片

步驟四:配置好webpack.config.js和main.js文件

webpack.config.js

module.exports = {
  entry: ‘./src/main.js‘, //指定打包的入口文件
  output: {
    path: __dirname + ‘/dist‘, //輸出路徑
    filename: ‘build.js‘ //輸出文件名
  },
  module: {
    loaders: [{
      test: /\.css$/,
      loader: ‘style-loader!css-loader‘
    }]
  }
}
main.js

// 1.0獲取dom對象
var v1 = document.querySelector("#v1");
var v2 = document.querySelector("#v2");
var bt = document.querySelector("#bt");
var res = document.querySelector("#res");

//導入css文件
require(‘../static/css/site.css‘)

bt.onclick = function() {
  // 2.0獲取calc.js中的add方法並且調用結果
  var v1value = parseFloat(v1.value);
  var v2value = parseFloat(v2.value);

  // 3.0調用add方法
  var add = require(‘./calc.js‘);
  res.value = add(v1value, v2value);
}

步驟五:使用命令打包、發布文件

技術分享圖片

最終目錄結構

技術分享圖片

案例四(打包sass)

步驟一:安裝nodesass

cnpm install node-sass sass-loader style-loader --save-dev

技術分享圖片

步驟二:創建一個scss文件

技術分享圖片

$color:blue;
#v2 {
    border: 1px solid $color;
}

步驟三:配置好webpack.config.js和main.js文件

webpack.config.js

module.exports = {
  entry: ‘./src/main.js‘, //指定打包的入口文件
  output: {
    path: __dirname + ‘/dist‘, //輸出路徑
    filename: ‘build.js‘ //輸出文件名
  },
  module: {
    loaders: [{
      test: /\.css$/,  //打包.css文件
      loader: ‘style-loader!css-loader‘
    },
    {
      test: /\.scss$/,  //打包.scss文件
      loader: ‘style-loader!css-loader!sass-loader‘
    }]
  }
}
main.js

// 1.0獲取dom對象
var v1 = document.querySelector("#v1");
var v2 = document.querySelector("#v2");
var bt = document.querySelector("#bt");
var res = document.querySelector("#res");

//導入css文件
require(‘../static/css/site.css‘);
//導入scss文件
require(‘../static/scss/site1.scss‘);

bt.onclick = function() {
  // 2.0獲取calc.js中的add方法並且調用結果
  var v1value = parseFloat(v1.value);
  var v2value = parseFloat(v2.value);

  // 3.0調用add方法
  var add = require(‘./calc.js‘);
  res.value = add(v1value, v2value);
}

步驟四:使用命令打包、發布文件

技術分享圖片

package.json文件內容為

{
  "name": "vue",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "fengxiong",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^0.28.7",
    "node-sass": "^4.7.2",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.19.1"
  }
}

案例五(打包less)

步驟一:安裝less-loader

技術分享圖片

步驟二:創建一個less文件

技術分享圖片

@color: green;
#res {
    border: 2px solid @color;
}

步驟三:配置好webpack.config.js和main.js文件

webpack.config.js

module.exports = { entry: ‘./src/main.js‘, //指定打包的入口文件 output: { path: __dirname + ‘/dist‘, //輸出路徑 filename: ‘build.js‘ //輸出文件名 }, module: { loaders: [{ test: /\.css$/, //打包.css文件 loader: ‘style-loader!css-loader‘ }, { test: /\.scss$/, //打包.scss文件 loader: ‘style-loader!css-loader!sass-loader‘ }, { test: /\.less$/, //打包.less文件 loader: ‘style-loader!css-loader!less-loader‘ }] } }
main.js

// 1.0獲取dom對象
var v1 = document.querySelector("#v1");
var v2 = document.querySelector("#v2");
var bt = document.querySelector("#bt");
var res = document.querySelector("#res");

//導入css文件
require(‘../static/css/site.css‘);
//導入scss文件
require(‘../static/scss/site1.scss‘);
//導入less文件
require(‘../static/less/site2.less‘);

bt.onclick = function() {
  // 2.0獲取calc.js中的add方法並且調用結果
  var v1value = parseFloat(v1.value);
  var v2value = parseFloat(v2.value);

  // 3.0調用add方法
  var add = require(‘./calc.js‘);
  res.value = add(v1value, v2value);
}

步驟四:使用命令打包、發布

技術分享圖片

package.json文件內容

{
  "name": "vue",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "fengxiong",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^0.28.7",
    "less": "^2.7.3",
    "less-loader": "^4.0.5",
    "node-sass": "^4.7.2",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.19.1"
  }
}

案例六(打包其他資源)

步驟一:安裝url-loader和file-loader

cnpm install url-loader file-loader --save-dev(需要在管理員權限下安裝)

技術分享圖片

步驟二:配置webpack.config.js文件

module.exports = {
  entry: ‘./src/main.js‘, //指定打包的入口文件
  output: {
    path: __dirname + ‘/dist‘, //輸出路徑
    filename: ‘build.js‘ //輸出文件名
  },
  module: {
    loaders: [{
        test: /\.css$/, //打包.css文件
        loader: ‘style-loader!css-loader‘
      },
      {
        test: /\.scss$/, //打包.scss文件
        loader: ‘style-loader!css-loader!sass-loader‘
      },
      {
        test: /\.less$/, //打包.less文件
        loader: ‘style-loader!css-loader!less-loader‘
      },
      {
        //註意url可能請求多個資源,所以將來在項目中通過url導入的
        //資源必須配置在這裏
        test: /\.(png|jpg|gif|ttf)$/, //打包url()請求的資源文件
        //如果圖片很大的話,那麽會造成build.js也比較大,加載的時候
        //導致效率低下。因此使用limit限制圖片大小,當圖片大小<40k,
        //則把它當做base64字符串存儲到build.js中
        //否則單獨將圖片存放到磁盤上,將路徑打包僅build.js中
        loader: ‘url-loader?limit=40000‘
      }
    ]
  }
}

步驟三:在html文件創建一個區域,在css、less或者scss中為那個區域添加一張圖片

#v1 {
  border: 1px solid red;
}

#bg {
  width: 300px;
  height: 100px;
  background: url(../../img/bg.jpg);
}

步驟四:步驟四:使用命令打包、發布

技術分享圖片

案例七(實現實時更新熱操作)

步驟一:安裝服務cnpm install webpack webpack-dev-server html-webpack-plugin --save-dev

技術分享圖片

步驟二:配置package.json

{
  "name": "vue",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
        "dev":"webpack-dev-server --inline --hot --open --port 5008"
  },
  "author": "fengxiong",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^0.28.7",
    "file-loader": "^1.1.6",
    "html-webpack-plugin": "^2.30.1",
    "less": "^2.7.3",
    "less-loader": "^4.0.5",
    "node-sass": "^4.7.2",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.19.1",
    "url-loader": "^0.6.2",
    "webpack": "^3.10.0",
    "webpack-dev-server": "^2.9.7"
  }
}

參數說明:
--inline 自動刷新
--hot 熱加載
--port 指定監聽端口
--open 自動在默認瀏覽器中打開
--host 可以指定服務器的if

步驟三:配置webpack.config.js文件

var htmlwp = require(‘html-webpack-plugin‘);

module.exports = {
  entry: ‘./src/main.js‘, //指定打包的入口文件
  output: {
    path: __dirname + ‘/dist‘, //輸出路徑
    filename: ‘build.js‘ //輸出文件名
  },
  module: {
    loaders: [{
        test: /\.css$/, //打包.css文件
        loader: ‘style-loader!css-loader‘
      },
      {
        test: /\.scss$/, //打包.scss文件
        loader: ‘style-loader!css-loader!sass-loader‘
      },
      {
        test: /\.less$/, //打包.less文件
        loader: ‘style-loader!css-loader!less-loader‘
      },
      {
        //註意url可能請求多個資源,所以將來在項目中通過url導入的
        //資源必須配置在這裏
        test: /\.(png|jpg|gif|ttf)$/, //打包url()請求的資源文件
        //如果圖片很大的話,那麽會造成build.js也比較大,加載的時候
        //導致效率低下。因此使用limit限制圖片大小,當圖片大小<40k //則把它當做base64字符串存儲到build.js中
        //否則單獨將圖片存放到磁盤上,將路徑打包僅build.js中
        loader: ‘url-loader?limit=40000‘
      }
    ]
  },
  plugins: [
    new htmlwp({
      title: ‘首頁‘, //生成頁面標題
      filename: ‘index.html‘,
      template: ‘index.html‘
    })
  ]
}

步驟四:使用npm run dev運行項目

技術分享圖片

案例八(實現es6轉es5)

步驟一:安裝四個包

babel-core

babel-loader

babel-preset-es2015

babel-plugin-transform-runtime:這個包主要是打包.vue組件頁面中的es6語法需要

技術分享圖片

步驟二:配置webpack.config.js文件

var htmlwp = require(‘html-webpack-plugin‘);

module.exports = {
  entry: ‘./src/main.js‘, //指定打包的入口文件
  output: {
    path: __dirname + ‘/dist‘, //輸出路徑
    filename: ‘build.js‘ //輸出文件名
  },
  module: {
    loaders: [{
        test: /\.css$/, //打包.css文件
        loader: ‘style-loader!css-loader‘
      },
      {
        test: /\.scss$/, //打包.scss文件
        loader: ‘style-loader!css-loader!sass-loader‘
      },
      {
        test: /\.less$/, //打包.less文件
        loader: ‘style-loader!css-loader!less-loader‘
      },
      {
        //註意url可能請求多個資源,所以將來在項目中通過url導入的
        //資源必須配置在這裏
        test: /\.(png|jpg|gif|ttf)$/, //打包url()請求的資源文件
        //如果圖片很大的話,那麽會造成build.js也比較大,加載的時候
        //導致效率低下。因此使用limit限制圖片大小,當圖片大小<40k //則把它當做base64字符串存儲到build.js中
        //否則單獨將圖片存放到磁盤上,將路徑打包僅build.js中
        loader: ‘url-loader?limit=40000‘
      },
      {
        //將當前項目中所有的.js文件都要進行es6轉es操作
        //node_modules除外
        test: /\.js$/, //打包.js文件
        loader: ‘babel-loader?presets[]=es2015‘,
        //node_modules中的所有.js文件不去轉換,提高打包性能
        exclude: /node_modules/
      }
    ]
  },
  //babel: {
  //presets: [‘es2015‘], //配置將es6語法轉換成es5語法
  //plugins: [‘transform-runtime‘] //為了解決打包.vue文件不報錯
  //},
  plugins: [
    new htmlwp({
      title: ‘首頁‘, //生成頁面標題
      filename: ‘index.html‘,
      template: ‘index.html‘
    })
  ]
}

步驟三:改變main.js和calc.js的語法

main.js

// 1.0獲取dom對象
var v1 = document.querySelector("#v1");
var v2 = document.querySelector("#v2");
var bt = document.querySelector("#bt");
var res = document.querySelector("#res");

//導入css文件
//require(‘../static/css/site.css‘);
//導入scss文件
//require(‘../static/scss/site1.scss‘);
//導入less文件
//require(‘../static/less/site2.less‘);

import ‘../static/css/site.css‘; //es6語法
import addObj from ‘./calc.js‘; //es6語法

bt.onclick = function() {
  // 2.0獲取calc.js中的add方法並且調用結果
  var v1value = parseFloat(v1.value);
  var v2value = parseFloat(v2.value);

  // 3.0調用add方法
  //var add = require(‘./calc.js‘);
  res.value = addObj.add(v1value, v2value);
}
calc.js

// 1.0定義add方法
function add(x, y) {
  return x + y;
}

// 2.0導出add方法
//module.exports = add;

//es6語法
export default {
  add //es6語法,當屬性名稱和屬性值變量同名的時候可以只寫一個
}

步驟四:使用命令npm run dev運行項目

技術分享圖片

webpack開發案例(一)