webpack-基础

本文详细介绍了 Webpack 的基本概念,包括入口、出口、Loader 和插件的使用。阐述了如何通过配置文件 webpack.config.js 设置入口文件、输出文件、处理非 JS 文件及代码转换。同时,还探讨了如何分离应用程序和第三方库,以及如何利用插件优化构建过程。

webpack-基础
貌似这些属于编译原理的内容。
当时看了一点编译原理,当中的自动机,彻底懵。
不过大概了解了一点内容。感觉webpack一个打包工具非常类似于一个编译器,将一个文件,转换为另外一个文件。

一些概念

入口

入口,即寻找入口文件的及其依赖项的文件。即编译前的文件
配置文件为webpack.config.js中修改为

module.exports = { 
  entry: "./app.js"
}

使用这个可以设置入口文件为./app.js由该文件,可以寻找相关的依赖

出口

output告诉要生成那些文件

const path = require("path");

module.exports = { 
  entry: "./app.js",
  output: {
      filename: "my-first-webpack.js"
  }
}

导出该文件

loader

loader可以让webpack处理非js文件。

  module: {
      rules: [
          {test: /\.txt$/, use: 'raw-loader'}    // 再遇到txt文件的时候,需要使用ras-loader进行转换一下 
      ]
  }

遇到txt文件的时候,需要使用raw-loader进行转换

类似于express中的中间件

raw-loader表示将文件作为字符串进行读取

插件

即打包,优化,定义环境中的变量等。

  plugins: [
      new HtmlWebpackPlugin({template: './src/index.html'})
  ]

入口文件

const config = {
    entry: './file.js',    // 定义入口文件
}

module.exports = config;

分离应用程序和第三方库

const config = {
    entry: {
        app: './src/app.js',
        vendors: './src/vendors.js'
    }
}

module.exports = config;

在上方中webpack会根据app和vendors分别创建两个互相没有任何依赖的依赖图,进行打包
在平常中,一个html文档,只使用一个入口文件。

出口

如何写出编译后的文件。

const config = {
    entry: {
        app: './src/app.js',
        vendors: './src/vendors.js'
    },
    output: {
        filename: 'bundle.js',    // 文件名称
        path: '/home/assets'    // 输出后的绝对路径
    }
}

module.exports = config;
const config = {
    entry: {
        app: './src/app.js',
        vendors: './src/vendors.js'
    },
    output: {
        filename: '[name].js',    // 文件名称,name为对象名,输出的文件为app.js vendors.js
        path: '/home/assets'    // 输出后的绝对路径
    }
}

module.exports = config;

出口,即编译完成后生成的文件

load

load为代码转换,可以使用这个加载css文件,使用这个将typeScript转为JavaScript
安装

npm install --save-dev ts-loader
const config = {
    entry: {
        app: './app.js'
    },
    output: {
        filename: '[name].js',    // 文件名称,name为对象名,输出的文件为app.js vendors.js
        path: '/home/assets'    // 输出后的绝对路径
    },
    module: {
        rules: [
            {test: /\.ts$/, use: 'ts-loader'}
        ]
    }
}

module.exports = config;

使用这个可以在打包的时候,将ts文件转为js文件。

插件

创建同名的js文件
这里的是apply()函数。

const pluginName = "ConsoleLogOnBuildWebpackPlugin"

class ConsoleLogOnBuildWebpackPlugin {
    apply(){
        console.log('构建开始');
    }
}

使用插件

const webpack = require('webpack');    // 访问内置插件

const config = {
    entry: {
        app: './app.js'
    },
    output: {
        filename: '[name].js',    // 文件名称,name为对象名,输出的文件为app.js vendors.js
        path: '/home/assets'    // 输出后的绝对路径
    },
    module: {
        rules: [
            {test: /\.ts$/, use: 'ts-loader'}
        ]
    },
    plugins: [
        new webpack.optimize.UgifyJsPlugin(),
        new ConsoleLogOnBuildWebpackPlugin()
    ]
}

module.exports = config;
### 使用 `cnpm` 全局安装 WebpackWebpack-CLI 和 Webpack-Dev-Server 的含义及用途 #### 一. 基础概念解释 1. **Webpack**: 这是一款功能强大的前端静态资源打包工具,主要用于将多个模块化文件组合成一个或几个最终产物。它支持复杂的依赖树分析以及多种类型的资产(JavaScript, CSS, 图片等),并通过插件机制扩展其能力[^1]。 2. **Webpack-CLI**: 提供命令行接口给 Webpack 使用,使开发者能够在终端中轻松地运行 Webpack 并传递参数选项。它是执行实际编译过程的关键部分,即使已安装 Webpack,若缺少此组件也无法正常启动构建流程。 3. **Webpack-Dev-Server**: 开发服务器提供了一个动态更新页面的功能,允许实时重新加载浏览器中的更改内容而无需手动刷新整个网页。这对于加快迭代周期非常有用,尤其是在调试阶段[^5]。 #### 二. 全局安装的意义与优势 通过 `cnpm install webpack webpack-cli webpack-dev-server -g` 命令实现这些工具的全局可用性意味着: - 用户可以从任意位置调用它们的相关命令,例如直接输入 `webpack` 即可触发打包操作,或者使用 `webpack-dev-server` 启动服务。 - 对于跨项目的通用需求来说特别方便,因为不需要每次进入新的工程都要重复设置相同的环境条件[^4]。 然而需要注意的是,尽管这种做法简化了一些初始配置步骤,但它也带来了潜在的风险——不同机器上的全局包可能处于不同的版本状态,这可能导致不可预测的行为差异甚至冲突现象的发生。 #### 三. 局部 vs 全局的区别 | 特征 | 全局安装 | 局部安装 | |---------------------|-----------------------------------|---------------------------------------| | **适用范围** | 整个操作系统 | 指定项目内部 | | **优点** | 易于访问; 不需额外路径设定 | 更精确控制每项工作的具体依赖版本 | | **缺点** | 可能引起多设备间一致性问题 | 初期准备时间较长 | 因此,在决定采取何种策略之前应当权衡利弊,并考虑到团队协作模式和个人习惯等方面因素的影响[^1]。 #### 四. 结合实例说明 假设我们现在有一个名为 MyProject 的 React 应用程序需要集成上述提到的所有三项技术,则可以通过如下方式完成初步搭建: ```bash mkdir myproject && cd $_ npm init -y cnpm install react react-dom --save cnpm install webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env css-loader style-loader html-webpack-plugin clean-webpack-plugin --dev-save ``` 之后为了便于日常维护还可以进一步完善 package.json 中 scripts 字段的内容以便更便捷的操作: ```json { ... "scripts": { "start": "npx webpack serve", "build": "npx webpack" } } ``` 这样以后只需要简单键入 `npm start` 或者 `npm run build`, 就可以分别开启本地测试服 务器或是正式生产版压缩后的静态资源了. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值