Introduction to Webpack

webpack是什么?

webpack是一个模块打包工具。

用vue项目来举例:浏览器它是只认识js,不认识vue的。而我们写的代码后缀大多是.vue的,在每个.vue文件中都可能html、js、css甚至是图片资源;并且由于组件化,这些.vue文件之间还有错综复杂的关系。所以项目要被浏览器识别,我们就要使用webpack将它们打包成js文件以及相应的资源文件。

hello.js

console.log("hello run")

main.js

console.log("main run");
require("./hello.js")

main.js中导入了hello.js,它们之间有导入关系。我们假如直接将main.js放到html中是会报错的。

<!DOCTYPE html>
<html>
  <head>
    <title>webpack demo</title>
  </head>
  <body>
    <h1>webpack</h1>
    <script src="main.js"></script>
  </body>
</html>
//输出结果
main run
Uncaught ReferenceError: require is not defined at main.js:2

如果我们要维持这种依赖关系我们就必须使用打包工具进行打包。在命令行中输入:

// 安装webpack
$ npm install webpack -g
// 打包main.js
$ webpack main.js bundle.js

然后我们会发现项目中多了一个bundle.js文件,我们在html中导入这个js文件。

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>webpack demo</title>
  </head>
  <body>
    <h1>webpack</h1>
    <script src="bundle.js"></script>
  </body>
</html>
//输出结果
main run
hello run

webpack.config.js

webpack.config.js文件是webpack的默认配置文件。

$ webpack entry.js output.js

const webpack = require("webpack")

module.exports = {
  //配置webpack的入口文件
  //示例中webpack会将与entry.js有关的资源都进行打包
  entry: {
    entry: "./app/entry.js",
  },
  //出口文件,即打包好的文件的存放地址和文件名。
  output:
  {
    path: __dirname + "/dist",
    filename: 'bundle.js',
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        loader: 'babel',
        exclude: /node_modules/
      },
    ]
  }
}

单文件,单输出

const webpack = require("webpack");
module.exports = {
  context: __dirname + "/src",
  entry: {
    app: "./app.js",
  },
  output: {
    path: __dirname + "/dist",
    filename: "[name].bundle.js",
  },
};

多文件,单输出

const webpack = require("webpack");
module.exports = {
  context: __dirname + "/src",
  entry: {
    app: ["./home.js", "./events.js", "./vendor.js"],
  },
  output: {
    path: __dirname + "/dist",
    filename: "[name].bundle.js",
  },
};

多文件,多输出

const webpack = require("webpack");
module.exports = {
  context: __dirname + "/src",
  entry: {
    home: "./home.js",
    events: "./events.js",
    contact: "./contact.js",
  },
  output: {
    path: __dirname + "/dist",
    filename: "[name].bundle.js",
  },
};
loaders
loader是webpack的加载器,可以帮我们处理各种非js文件。如css样式,vue、jsx、weex等后缀的代码,JPG、PNG图片等。所以我们一般会在package.json中看到各种***-loader。这些就是各类资源的loader加载器。

参考文档:https://github.com/violetjack/FEProjectDemos

作者 admin

百度广告效果展示