webpack使用

1、什麼是以及爲何要使用webpackcss

  如今的網頁功能愈來愈豐富,所須要的JavaScript和模塊也會不少,爲開發更加簡潔,出現瞭如下方法,如模塊化,scss,typescript等。
但有些語法是瀏覽器沒法識別的。因此須要用到webpack。
  WebPack是模塊打包器,它會將瀏覽器不能支持不能識別的語言語法,打包轉換成瀏覽器可識別的語法,如(Scss,TypeScript等)。

2、webpack 與 gulp 的區別html

二者並沒有太多的可比性
一、webpack是爲模塊化提供解決方案;
二、gulp是前端自動化構建工具。

3、如何使用webpack前端

注:此例以webpack@3.5.3版本爲例
另,熱更新 服務器webpack-dev-server@2 依託以上版本

實例:node

一、全局安裝webpackreact

cnpm install webpack@3.5.3 -g
或
npm install webpack@3.5.3 -g

二、新建一個文件夾,並初始化文件webpack

npm init -y

  以後,文件夾內會出現一個package.json 的文件web

三、局部安裝webpacktypescript

cnpm install webpack@3.5.3 --save-dev

  以後,文件夾會出現一個node_modules 的文件npm

 

四、新建webpack.config.js文件夾json

五、建立 src 和dist 文件夾

 

六、src入口文件中新建index.js文件(書寫須要的內容)如:

  

console.log(222)

 

七、配置webpack.config.js文件(配置基礎部分)

// 引入核心模塊
const path = require('path');

// __dirname:當前文件夾的絕對路徑
// path.join:鏈接兩個參數,生成新的路徑
const PATH = {
    app:path.join(__dirname,'./src/index.js'),
    build:path.join(__dirname,'./dist')
}

// 測試,用node webpack.config.js 運行
// console.log(PATH.app)

// webpack配置項
module.exports = {
    entry:{
        // 入口路徑,app名字決定下面出口文件的名字
        app:PATH.app
    },
    output:{
        filename:"[name].js",   //生成的出口文件名字爲app.js
        path:PATH.build
    }
}

 cmd命令中,運行打包命令:

webpack

八、在dist中會生成一個app.js文件,內容以下

/******/ (function(modules) { // webpackBootstrap
/******/     // The module cache
/******/     var installedModules = {};
/******/
/******/     // The require function
/******/     function __webpack_require__(moduleId) {
/******/
/******/         // Check if module is in cache
/******/         if(installedModules[moduleId]) {
/******/             return installedModules[moduleId].exports;
/******/         }
/******/         // Create a new module (and put it into the cache)
/******/         var module = installedModules[moduleId] = {
/******/             i: moduleId,
/******/             l: false,
/******/             exports: {}
/******/         };
/******/
/******/         // Execute the module function
/******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/         // Flag the module as loaded
/******/         module.l = true;
/******/
/******/         // Return the exports of the module
/******/         return module.exports;
/******/     }
/******/
/******/
/******/     // expose the modules object (__webpack_modules__)
/******/     __webpack_require__.m = modules;
/******/
/******/     // expose the module cache
/******/     __webpack_require__.c = installedModules;
/******/
/******/     // define getter function for harmony exports
/******/     __webpack_require__.d = function(exports, name, getter) {
/******/         if(!__webpack_require__.o(exports, name)) {
/******/             Object.defineProperty(exports, name, {
/******/                 configurable: false,
/******/                 enumerable: true,
/******/                 get: getter
/******/             });
/******/         }
/******/     };
/******/
/******/     // getDefaultExport function for compatibility with non-harmony modules
/******/     __webpack_require__.n = function(module) {
/******/         var getter = module && module.__esModule ?
/******/             function getDefault() { return module['default']; } :
/******/             function getModuleExports() { return module; };
/******/         __webpack_require__.d(getter, 'a', getter);
/******/         return getter;
/******/     };
/******/
/******/     // Object.prototype.hasOwnProperty.call
/******/     __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/     // __webpack_public_path__
/******/     __webpack_require__.p = "";
/******/
/******/     // Load entry module and return exports
/******/     return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {

console.log(222)

/***/ })
/******/ ]);

 

恭喜!至此,一次簡單的打包完成!

但須要注意,以上打包方式僅適合4.0版本如下。4.0以上會有簡單的變化。


 

九、當瀏覽器遇到不能識別的代碼時,須要用到loader

  提早安裝loader,在代碼中解釋

處理css的loader

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

處理js的loader

                cnpm install --save-dev @babel/core babel-loader @babel/preset-env @babel/preset-react

 

配置以下:

// 引入核心模塊
const path = require('path');

// __dirname:當前文件夾的絕對路徑
// path.join:鏈接兩個參數,生成新的路徑
const PATH = {
    app:path.join(__dirname,'./src/index.js'),
    build:path.join(__dirname,'./dist')
}

// 測試,用node webpack.config.js 運行
// console.log(PATH.app)

// webpack配置項
module.exports = {
    entry:{
        // 入口路徑,app名字決定下面出口文件的名字
        app:PATH.app
    },
    output:{
        filename:"[name].js",   //生成的出口文件名字爲app.js
        path:PATH.build
    },
    // 需提早配置好,解決瀏覽器不能識別的語法
    module:{
        rules:[
            {
                test:/\.js$/,
                use:{
                    loader:'babel-loader',
                    options:{
                        presets:['@babel/env','@babel/react']
                    }
                }
            },
            {
                test:/\.(css|scss)$/,
                use:['style-loader','css-loader','sass-loader']
            }
        ]
    }
}

 

  

  cmd命令中,運行打包命令:

webpack

 

  在dist 下新建一個index.html 文件,並引入app.js,便可實現

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script src="./app.js"></script>

 

如今,便可完成對不識別代碼的識別,如ES6轉爲ES5等


 

 

以上爲手動添加index,html文件

生成html模板(cmd命令)

插件
                cnpm install html-webpack-plugin --save-dev

webp新加plugins 配置

// 引入核心模塊
const path = require('path');
const HtmlWebpackPlugin = require("html-webpack-plugin");

// __dirname:當前文件夾的絕對路徑
// path.join:鏈接兩個參數,生成新的路徑
const PATH = {
    app:path.join(__dirname,'./src/index.js'),
    build:path.join(__dirname,'./dist')
}

// 測試,用node webpack.config.js 運行
// console.log(PATH.app)

// webpack配置項
module.exports = {
    entry:{
        // 入口路徑,app名字決定下面出口文件的名字
        app:PATH.app
    },
    output:{
        filename:"[name].js",   //生成的出口文件名字爲app.js
        path:PATH.build
    },
    // 需提早配置好,解決瀏覽器不能識別的語法
    module:{
        rules:[
            {
                test:/\.js$/,
                use:{
                    loader:'babel-loader',
                    options:{
                        presets:['@babel/env','@babel/react']
                    }
                }
            },
            { 
                test:/\.(css|scss)$/,
                use:['style-loader','css-loader','sass-loader']
            }
        ]
    },
    // 插件在plugins中使用 plugins:[ // HtmlWebpackPlugin 爲構造函數 new HtmlWebpackPlugin({ // 生成的文件名稱 filename:'index.html', // 模板文件 template:'./index.html', }) ]
}

 

十、減小每次手動運行webpack,須要用熱更新

cnpm install webpack-dev-server@2 --save-dev

在package.json 的 script中添加

"scripts": {
    "dev":"webpack-dev-server --open",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

而後,cmd中運行

npm run dev

便可完成實時更新。。。。

注src 下的index.js 可導入其餘文件,如:body.css,

  index.js:

import * as obj from './modeleW'

import './body.css'
console.log(222) console.log(obj.name) console.log(obj.age) console.log(obj.sign)

  body.css:

body{
    background: red;
}

手敲不易,肩膀疼,,,,,

相關文章
相關標籤/搜索