須要首先安裝 nodejsjavascript
咱們但願可以在系統的任何文件夾中使用 Webpack,使用的方式是經過 Webpack 命令來完成的,這須要咱們全局安裝 Webpack。這也只須要安裝一次,之後每一個項目就不須要從新全局安裝了。html
npm install webpack -g
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" }
直接使用 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" }
文件名 hello.js ,保存在根目錄下json
(function hello(){ console.log("Hello, 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!'); })(); /***/ }) /******/ ]);
大多都是註釋,最後就是咱們的腳本。
剛剛只是一段腳本,還須要放到網頁中才能執行。咱們能夠安裝一個自動幫咱們生成宿主網頁的 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>