webpack4.0+版本练习

webpack安装

  1. 确保安装 Node.js 的最新版本
  2. 本地安装
(对于大多数项目,官方建议本地安装。这可以使我们在引入破坏式变更的依赖时,
更容易分别升级项目)

最新的webpack版本是:

// 要安装最新版本或特定版本,请运行以下命令之一:

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

// 如果你使用 webpack 4+ 版本,你还需要安装 CLI。
npm install --save-dev webpack-cli

// 全局安装
(官方不推荐全局安装 webpack。这会将你项目中的 webpack 锁定到指定版本,
并且在使用不同的 webpack 版本的项目中,可能会导致构建失败。)

npm install --global webpack

webpack起步

1.基本安装
//首先我们创建一个目录,初始化 npm,然后 在本地安装 webpack,
//接着安装 webpack-cli(此工具用于在命令行中运行 webpack):

windows+r  输入cmd 打开终端
vscode打开终端ctrl+~
安装了git 桌面右键选择Git bash here
执行以下命令

1.创建一个文件夹,并进入这个文件夹
mkdir demo && cd demo 

2.从当前目录中提取的信息生成默认的package.json
npm init -y   

3.安装webpack-cli 
npm install webpack webpack-cli --save-dev

现在我们将创建以下目录结构、文件和内容,将“源”代码(/src)从我们的“分发”代码(/dist)中分离出来。“源”代码是用于书写和编辑的代码。“分发”代码是构建过程产生的代码最小化和优化后的“输出”目录,最终将在浏览器中加载:

在demo项目下,新建src dist 文件夹,
在src下新建index.js
在dist下新建 index.html
-demo
 -dist
  -index.html
 -src
  -index.js

目录:src/index.js


function component() {
    var element = document.createElement('div');
    element.innerHTML = 'hello webpack'
    return element;
}

document.body.appendChild(component());

目录:dist/index.html

<!doctype html>
<html>
<head>
    <title>起步</title>
</head>
<body>
    <script src="main.js"></script>
</body>
</html>

执行 npx webpack,会将我们的脚本作为入口起点,然后 输出 为 main.js。Node 8.2+ 版本提供的 npx 命令,可以运行在初始安装的 webpack 包(package)的 webpack 二进制文件

命令执行后再dist目录下会打包多出一个main.js
在这里插入图片描述

使用一个配置文件
在 webpack 4 中,可以无须任何配置使用,然而大多数项目会需要很复杂的设置,这就是为什么 webpack 仍然要支持 配置文件。这比在终端(terminal)中手动输入大量命令要高效的多,所以让我们创建一个取代以上使用 CLI 选项方式的配置文件:
在项目文件夹demo下新建

目录:webpack.config.js:

const path = require('path');

module.exports = {

    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    }
};

这样用配置文件之后,打开dist文件将main.js删除
打开index.html
将原先:

<script src="main.js"></script>
修改为
<script src="bundle.js"></script>

执行:npx webpack –config webpack.config.js
在这里插入图片描述

打开index.html
会看到让然输出 Hello webpack

比起 CLI 这种简单直接的使用方式,配置文件具有更多的灵活性。
我们可以通过配置方式指定 loader 规则(loader rules)、
插件(plugins)、解析选项(resolve options),以及许多
其他增强功能。了解更多详细信息,请查看官方配置文档。
后边会主要说下webpack.config.js的配置项

构建一个简单的NPM 脚本(NPM Scripts)

考虑到用 npx webpack –config webpack.config.js 这种方式来运行本地的 webpack 不是特别方便,我们可以设置一个快捷方式。

在 package.json 添加一个 npm 脚本(npm script):
打开package.json:
在scripts 对象中添加 { “build”: “webpack” }
如下 :

{
    "name": "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.15.1",
        "webpack-cli": "^3.0.8"
    },
    "dependencies": {
        "lodash": "^4.17.10"
    }
}
**现在,可以使用 npm run build 命令,来替代我们之前使用的 npx 命令**

webpack.config.js的配置及使用

上边已经说了webpack的简单配置,以后你的项目的所有配置都会在webpack.config.js中
对此文件做个简单的说明的配置说明前,需要理解的几个概念:
文档地址:https://www.webpackjs.com/concepts
四大概念:
entry       output      loader      plugins

// 指示webpack 应该使用哪个模块,来作为构建其内部依赖图的开始
 入口(entry)  

//告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist
 输出(output)

// loader 让 webpack 能够去处理那些非 JavaScript 文件,
// 比如css img等(webpack 自身只理解 JavaScript)
// 在 webpack 的配置中 loader 有两个目标:
    // test 属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。
    // use 属性,表示进行转换时,应该使用哪个 loader。
loader

// 插件可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义
// 环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

插件(plugins)

介绍完概念,来看看具体怎那么使用
打开webpack.config.js

const path = require('path');
const webpack = require('webpack');
const HappyPack = require('happypack');
// 安装一个插件
// cnpm install html-webpack-plugin;

// 插件的使用及配置请自己百度
// 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {

    // 文件入口
    entry: './src/index.js',

    // 文件出口
    // path.resolve()方法将一系列路径或路径段解析为绝对路径。参见node
    // 语法:path.resolve([from ...], to)
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    // 提供 mode 配置选项,告知 webpack 使用相应模式的内置优化,
    // 一般用来配置开发还是生产模式,及开发环境,线上环境。
    mode: 'production' || "development",

    /**
     * loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时
     * 预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前
     * 端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)
     * 转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在
     *  JavaScript 模块中 import CSS文件!
     */
    /**
     * 安装css ,ts loader 处理css typascript 
     *  npm install --save-dev css-loader
     *  npm install --save-dev ts-loader
     */

    // module  test:哪些文件 被转译   use:用哪些loader 转化
    // 安装es6 语法转换器bable
    // npm install babel-cli --save-dev

    module: {

        rules: [{
                test: /\.css$/,
                use: [{
                        loader: 'style-loader'
                    },
                    {
                        loader: 'css-loader',
                        options: {
                            modules: true
                        }
                    }
                ]
            },
            // 安装babel-loader
            // npm install--save - dev babel - loader babel - core
            {
                test: /\.js$/,
                use: [{
                    loader: 'babel-loader',
                }]
            }
        ]
    },
    // 插件使用
    plugins: [
        //自动生成index.html文件
        new HtmlWebpackPlugin({
            filename: 'index.html',
            title: 'Hot Module Replacement'
        }),
        new webpack.HotModuleReplacementPlugin(),
        new HappyPack({
            // 3) re-add the loaders you replaced above in #1:
            loaders: ['babel-loader?presets[]=es2015']
        }),
        new HappyPack({
            id: 'js',
            threadPool: happyThreadPool,
            loaders: ['babel-loader']
        }),

        new HappyPack({
            id: 'styles',
            threadPool: happyThreadPool,
            loaders: ['style-loader', 'css-loader', 'less-loader']
        })
    ],
    // 使用 webpack-dev-server 热加载服务器
    //  安装 : npm install --save-dev webpack-dev-server
    // webpack-dev-server 为你提供了一个简单的 web 服务器,
    devServer: {
        contentBase: path.join(__dirname, "dist"),
        compress: true,
        hot: true,
        port: 9000
    }
};

在这里插入图片描述

…babelrc文件

{
    "presets": ["es2015"]
}

你想要什么插件,怎么安装配置,请参开
https://www.npmjs.com/

package.json文件:

{
    "name": "demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack",
        "start": "webpack-dev-server --open"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "babel-cli": "^6.26.0",
        "babel-core": "^6.26.3",
        "babel-loader": "^7.1.5",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-latest": "^6.24.1",
        "css-loader": "^1.0.0",
        "happypack": "^5.0.0",
        "html-webpack-plugin": "^3.2.0",
        "style-loader": "^0.21.0",
        "webpack": "^4.15.1",
        "webpack-cli": "^3.0.8",
        "webpack-dev-server": "^3.1.4"
    },
    "dependencies": {
        "lodash": "^4.17.10"
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37339364/article/details/84578072