webpack打包js文件的问题

前言

这里记录下webpack打包js文件的配置和遇到的问题。因环境版本等不同,解决办法未必都是通用的,仅作为大家参考之用;

我的环境配置

macOS M1 系统
webpack版本:(全局版本)webpack 5.49.0,webpack-cli 4.7.2
node版本:v14.17.4
开发工具:webstorm

学习自建目录结构

在这里插入图片描述

  1. dist目录下存放的是我们webpack打包后的最终js输出文件
  2. node_modules 是我们安装项目本地的webpack后,目录自动生成的,全局和本地的webpack的区别简单的来说就是,由于我们开发中自己电脑上的webpack版本(全局)未必与公司开发的实际使用的版本相兼容匹配,所以我们可以通过安装指定的本地版本来打包我们的项目。
  3. src目录下存放的就是我们的js源码文件,这里定义了一个主js文件,有来自calculate.js的依赖。
    main.js:
const {sum, muti} = require('./calculate')  //导入依赖文件
console.log(sum(10, 20))
console.log(muti(14,20))

calculate.js:

function sum(num1, num2){
    return num1 + num2
}

function muti(num1, num2) {
    return num1 * num2
}
// 导出变量或方法方便外部引用
module.exports = {
    sum,muti
}

4、index.html是我们的测试页文件
index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack</title>
</head>
<body>
<!--这里只要引入我们最终打包生成的js文件即可,-->
<!--webpack会自动解决多个js中的依赖问题-->
<script src="./dist/bundle.js"></script>
</body>
</html>

5、package.json;是在npm init之后生成的文件,package.json文件会描述这个NPM包的所有相关信息,包括作者、简介、包依赖、构建等信息,格式是严格的JSON格式。
package.json:

{
  "name": "hbp",
  "version": "1.0.0",
  "description": "test",
  "main": "bundle.js",
  "scripts": {         //定义脚本
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --mode production"     //如build定义后,我们在终端上敲入npm run build即可进行webpakck的打包操作
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {    //此项在你安装了本地webpack之后会自动加上
    "webpack": "^3.6.0"
  }
}

6、package-lock.json:这个package-lock.json 是在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号
7、webpack.config.js是主要的配置文件

出现的问题1:

在这里插入图片描述
出现module,require,exports等is not defined的情况下,我们首先确定我们的node环境是否正常,其次就是排除配置webpack.config.js中的这个配置:

libraryTarget: 'commonjs2'  //这个只针对node有效,浏览器是无效的,所以我们无需配置这个

正确配置如下:

// 引入path模块
const path = require('path')
// 项目打包导出的配置
module.exports = {
    entry:'./src/main.js',     --项目入口
    output:{     --输出文件路径
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    },
    mode: 'development'   -- 指定模式(参数分none,development,production三种)
}

原理可以参考:https://zhuanlan.zhihu.com/p/108216236

出现的问题2

我在测试时,没有指定mode的时候,报了如下错误:
在这里插入图片描述
解决:这个问题是在高版本的webpack中存在的,必须在打包的时候指定mode,在webpack.config.js文件中加入mode的配置即可;
在这里插入图片描述

还有一种方法就是如果你已经在package.json文件中配置了scripts,那么加入一个自定义的脚本,并输入执行命令语句webpack --mode production|none|development,然后终端执行npm run + 你定义的脚本代号;如:

在这里插入图片描述
tips: 需要注意的是,我们在终端中输入的webpack必然是用的全局的webpack版本,而我们定义了脚本,通过npm run的方式会先检查本地的webpack版本,没有再去找全局变量的。
配置官方文档说明参考:https://webpack.js.org/concepts/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值