webapck 安装与起步

209 阅读2分钟

前言

webapck的作用:

webpack是JavaScript应用程序的静态模块打包工具。当webpack处理应用程序时,会在内部生成一副依赖图,依赖图会映射项目所需的每个模块,并生成一个或多个bundle。

安装

本地安装

  • 现在最新的版本是v4.39.1

要安装最新的版本或者特定的版本请运行以下命令:

npm install webpack --save-dev
npm install webpack@<version> --save-dev

如果你使用的webapck版本是4+版本,你还需要安装CLI

npm install webpack-cli --save-dev

全局安装

npm install webpack --global

起步

初始化一个项目

mkdir webpack-demo && cd webpack-demo
npm init -y
npm install webpack webpack-cli --save-dev

构建目录结构

/dist   ———— 打包之后的目录
    --index.html 
/node-modules
/src    ———— 源目录
    --index.js
package.json
webpack.config.js ——webpack配置

dist/index.html

<!doctype html>
<html>
  <head>
    <title>管理资源</title>
  </head>
  <body>
    <script src="./bundle.js"></script>
  </body>
</html>

src/index.js

import _ from 'lodash';
function component() {
    let element = document.createElement('div');
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');
    return element;
  }
  
  document.body.appendChild(component());

webpack.config.js

const path = require("path");
module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  }
};

以上主要是配置了打包的入口和出口,用到的node的path包,对路径的转化做处理。

package.json

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.39.1",
    "webpack-cli": "^3.3.6"
  },
  "dependencies": {
    "lodash": "^4.17.15"
  }
}

对scripts加了个webpack的配置

loader配置

webpack有一个很强大的功能,就是可以通过不同的loader,处理各种类型的文件。包括xml、css、图片、字体等。以下用css、图片举例:

目录结构

/dist
    --index.html 
/node-modules
/src
    --index.js
    ——icon.jpeg -- 图片
    —— style.css -- css
package.json
webpack.config.js 

安装对应的loader

npm install style-loader css-loader file-loader

webpack.config.js

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader'
        ]
      },{
        test: /\.(png|svg|jpg|jpeg|gif)$/,
        use: [
          'file-loader'
        ]
      }
    ]
  }
};
以上rules是一个数组,所有的loader规则都是放在这个数组里面的。第一条css规则的意思是告诉webpack: hello,webpack,打包的时候遇到test这种类型的就用use里面的loader先转化。

src/style.css

.hello{
    color: red;
    background: url('./icon.jpeg');
}

src/index.js

...
import './style.css';
import Icon from './icon.jpeg';
function component() {
   ...
    element.classList.add('hello');

    // 将图像添加到我们已经存在的div中
    let myIcon = new Image();
    myIcon.src = Icon;
    element.appendChild(myIcon);
    ...
  }
  
  ...
这个时候你在控制台执行npm run build, 在dist里面会生成对应处理过的图片。浏览器打开dist/index.html。就可以看到对应的图片和字体颜色。