用Webpack建立一個腳本並自動嵌入網頁

須要首先安裝 nodejsjavascript

1. 全局安裝 Webpack

咱們但願可以在系統的任何文件夾中使用 Webpack,使用的方式是經過 Webpack 命令來完成的,這須要咱們全局安裝 Webpack。這也只須要安裝一次,之後每一個項目就不須要從新全局安裝了。html

npm install webpack -g

2. 在項目中安裝 Webpack

2.1 建立package.json配置文件

npm init

新建立的 package.json 內容應該以下所示:java

{
  "name": "w1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {},
  "dependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

2.2 在項目中安裝 Webpack

直接使用 NPM 的 install 命令。node

npm install webpack --save-dev

--save-dev 的意思是說 webpack 是一個開發工具,咱們須要將這一點保存到 package.json 文件中。webpack

--save-dev 還能夠簡化爲大寫的 S,寫成 --S。web

npm i webpack --S

這時候, package.json 文件多了三行。npm

{
    "name": "w1",
    "version": "1.0.0",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "description": "",
    "dependencies": {
       "webpack": "^2.6.0"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
}

3.建立一個普通腳本文件而後打包

文件名 hello.js ,保存在根目錄下json

(function hello(){
    console.log("Hello, Webpack!");
})();

3.1 建立 Webpack 配置文件

Webpack 默認的配置文件名是 webpack.config.js。
Webpack 的工做就是打包,你須要告訴它打包的內容,以及輸出到哪裏。entry 就是入口,output 就是輸出。
咱們讓 Webpack 將 hello.js 文件打包後輸出到 bundle.js 文件中。ide

module.exports = {
  // 入口
  entry: "./hello.js",
  // 輸出的文件名
  output: {
    filename: 'bundle.js'
  }
};

在命令窗口,輸入 webpack 回車執行。應該會看到以下的輸出。工具

> webpack
Hash: 3bd1a17d835003ecda85
Version: webpack 2.6.0
Time: 386ms
    Asset     Size  Chunks             Chunk Names
bundle.js  2.68 kB       0  [emitted]  main
   [0] ./hello.js 49 bytes {0} [built]

默認的入口文件名爲 index.js,若是將 hello.js 更名爲 index.js,還能夠直接使用目錄名,不用提供文件名。

module.exports = {
  // 入口,默認入口文件名爲 index.js
  entry: ".",
  // 輸出的文件名
  output: {
    filename: 'bundle.js'
  }
};

生成的 bundle.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;
/******/
/******/     // identity function for calling harmony imports with the correct context
/******/     __webpack_require__.i = function(value) { return value; };
/******/
/******/     // 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) {

(function hello() {
    console.log('Hello, Webpack!');
})();

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

大多都是註釋,最後就是咱們的腳本。

3.2 將腳本嵌入到網頁中

剛剛只是一段腳本,還須要放到網頁中才能執行。咱們能夠安裝一個自動幫咱們生成宿主網頁的 webpack 插件 html-webpack-plugin 來幫助咱們。有關 html-webpack-plugin 使用說明看這裏

npm install html-webpack-plugin --save-dev

配置 Webpack 使用這個插件,幫助咱們生成一個網頁,而後將打包的腳本自動插入到這個網頁中。

var HtmlwebpackPlugin = require('html-webpack-plugin');
module.exports = {
  // 入口
  entry: ".",
  // 輸出的文件名
  output: {
    filename: 'bundle.js'
  },
  // 添加咱們的插件 會自動生成一個html文件
  plugins: [
    new HtmlwebpackPlugin({
      title: 'Hello Webpack'
    })
  ]
};

注意第一行,必定要加上。

從新執行 webpack 命令。你會看到多生成了一個名爲 index.html 的網頁。

> webpack
Hash: 076d7b9f6ae9032d1dd4
Version: webpack 2.6.0
Time: 483ms
     Asset       Size  Chunks             Chunk Names
 bundle.js    2.68 kB       0  [emitted]  main
index.html  184 bytes          [emitted]
   [0] ./index.js 49 bytes {0} [built]
Child html-webpack-plugin for "index.html":
       [0] ./~/lodash/lodash.js 540 kB {0} [built]
       [1] ./~/html-webpack-plugin/lib/loader.js!./~/html-webpack-plugin/default
_index.ejs 538 bytes {0} [built]
       [2] (webpack)/buildin/global.js 509 bytes {0} [built]
       [3] (webpack)/buildin/module.js 517 bytes {0} [built]

打開這個網頁,檢查插入的腳本引用。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello Webpack</title>
  </head>
  <body>
  <script type="text/javascript" src="bundle.js"></script></body>
</html>
相關文章
相關標籤/搜索