【一】Webpack之CommonJS规范使用

172 阅读2分钟

使用 Webpack 构建项目,在网页中显示 Hello, Webpack

运行构建前,先要完成最基础的 JavaScript 和 HTML 文件,需要如下文件:

页面入口文件 index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="app"></div>
  <!--导入 Webpack 输出的 JavaScript 文件-->
  <script src="./dist/bundle.js"></script>
</body>

</html>

JS 函数文件 draw.js

// 操作 DOM 元素,添加内容。
function draw(content) {
  window.document.getElementById('app').innerText = 'Hello,' + content;
}
// 通过 CommonJS 规范导出 draw 函数
module.exports = draw

JS 执行入口文件 main.js

// 通过 CommonJS 规范导入 show 函数
const draw = require('./draw.js');
// 执行 show 函数
draw('Webpack');

众所周知,Webpack 在执行构建时默认从项目根目录下的 webpack.config.js 文件读取配置,所以需要新建webpack.config.js文件,其内容如下:

const path = require('path');

module.exports = {
  // JavaScript 执行入口文件
  entry: './main.js',
  output: {
    // 把所有依赖的模块合并输出到一个 bundle.js 文件
    filename: 'bundle.js',
    // 输出文件都放到 dist 目录下
    path: path.resolve(__dirname, './dist'),
  }
};

由于 Webpack 构建运行在 Node.js 环境下,所以你懂的。npm install是少不了的。加油!你是最胖的。

外挂:

webpack.config.js根据 Npm Script 终端动态输入对应模块名称,进行定制打包构建。

const path = require('path');
// `process.argv` 属性返回数组,其中包含启动 Node.js 进程时传入的命令行参数。
const argMode = process.argv[process.argv.length - 1];
// 入口文件变量
const entry = `./${argMode}/main.js`;

module.exports = {
  // JavaScript 执行入口文件
  entry: entry,
  output: {
    // 把所有依赖的模块合并输出到一个 bundle.js 文件
    filename: 'bundle.js',
    // 输出文件都放到 argMode 模块 dist 目录下
    path: path.resolve(__dirname, `./${argMode}/dist`),
  },
  // Webpack 不支持解析原生 CSS 文件。
  module: {
    rules: [
      {
        // 用正则去匹配要用该 loader 转换的 CSS 文件
        test: /\.css$/i,
        // use: ['style-loader', 'css-loader']
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {}
          }
        ]
      }
    ]
  },
};

详解process.argv 属性返回数组,其中包含启动 Node.js 进程时传入的命令行参数。 第一个元素将是 process.execPath。 如果需要访问 argv[0] 的原始值,请参阅 process.argv0。 第二个元素将是正在执行的 JavaScript 文件的路径。 其余元素将是任何其他命令行参数。

例子:项目是多模块的,其中一个模块名 webpackLoader。传参命令如下: npm run start -- --name webpackLoader 在这里要格外注意 --name 参数前面的 -- 分隔符,意指要给 npm run start 实际指向的命令传递额外的参数。