首页 > 其他分享 >WebPack入门

WebPack入门

时间:2023-09-10 14:46:39浏览次数:39  
标签:__ exports 入门 require webpack module js WebPack

什么是webpack

简单地说就是要一个web的打包工具,将项目所需要的资源进行打包处理。

安装webpack

很简单,首先是初始化一个node.js的项目

npm init

之后就是安装webpack以及webpack-cli

npm i webpack webpack-cli D

初试打包

我们在src/js目录下分别新建两个js文件,分别执行加法和减法操作
count.js

export default function count(x, y){
    return x - y
}

sum.js

export default function sum (...args){
    return args.reduce((p, c) => p + c, 0)
}

同时新建一个main.js来使用这上面了两个新建的js

import count from './js/count'
import sum from './js/sum'

console.log(count(2, 1))
console.log(sum(2, 1,3))

因为浏览器无法直接解析es6中的import语句,我们执行一下html代码时浏览器会报错

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hello</h1>
    <script src="../src/main.js"></script>
</body>
</html>

这个时候,我们就需要将之前的js打包为一个或多个js来使其能被浏览器识别。执行以下代码来进行打包

npx webpack ./main.js --model=development

其中,npx的意思为执行node_modules\bin目录下的环境变量,使用webpack来对./main.js来进行打包,模式为开发模式development
打包完的文件在dist目录下的main.js,内容如下:

/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./src/js/count.js":
/*!*************************!*\
  !*** ./src/js/count.js ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ count)\n/* harmony export */ });\nfunction count(x, y){\r\n    return x - y\r\n}\n\n//# sourceURL=webpack://webpack_study/./src/js/count.js?");

/***/ }),

/***/ "./src/js/sum.js":
/*!***********************!*\
  !*** ./src/js/sum.js ***!
  \***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ sum)\n/* harmony export */ });\nfunction sum (...args){\r\n    return args.reduce((p, c) => p + c, 0)\r\n}\n\n//# sourceURL=webpack://webpack_study/./src/js/sum.js?");

/***/ }),

/***/ "./src/main.js":
/*!*********************!*\
  !*** ./src/main.js ***!
  \*********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _js_count__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./js/count */ \"./src/js/count.js\");\n/* harmony import */ var _js_sum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./js/sum */ \"./src/js/sum.js\");\n\r\n\r\n\r\nconsole.log((0,_js_count__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(2, 1))\r\nconsole.log((0,_js_sum__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(2, 1,3))\n\n//# sourceURL=webpack://webpack_study/./src/main.js?");

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval devtool is used.
/******/ 	var __webpack_exports__ = __webpack_require__("./src/main.js");
/******/ 	
/******/ })()
;

配置文件

在根目录下设置配置文件webpack.conf.js,再有了配置文件之后,直接在控制台中输入npx webpack就可以开始打包了,再有配置文件时,会优先执行配置文件,没有的话在执行命令中的参数,一开始最简单的配置如下:

const path = require('path')    // nodejs的核心模块之一,用来处理路径问题

module.exports = {
    // 入口(绝对路径)
    entry: './src/main.js',
    // 输出
    output: {
        // 输出的路径(相对路径)
        // __dirnamem:当前文件的文件夹目录
        path: path.resolve(__dirname, 'dist'),
        // 文件名
        filename: 'main.js'
    },
    // 加载器
    module: {
        rules: [
            // loader的设置
        ],
    },
    // 插件
    plugins: [

    ],
    // 模式
    mode: "development"
}

标签:__,exports,入门,require,webpack,module,js,WebPack
From: https://www.cnblogs.com/fanick/p/17690996.html

相关文章

  • chrome插件:一个基于webpack + react的chrome 插件项目模板
    项目结构$tree-L1.├──README.md├──node_modules#npm依赖├──package.json#详细依赖├──pnpm-lock.yaml├──public#里边包含dist,安装的时候安装这个目录即可├──src#源码文......
  • RocketMQ 入门实战(3)--Admin Tool 介绍
    本文主要介绍RocketMQ管理工具(mqadmin)的使用,文中所使用到的软件版本:RocketMQ5.1.3、CentOS 7.9.2009。1、mqadmin说明A、执行命令方法:./mqadmin{command}{args}B、几乎所有命令都需要配置-n表示NameServer地址,格式为ip:portC、几乎所有命令都可以通过-h获取帮助......
  • 系统入门C语言的寄存器
    你好,我是悦创。本篇为C语言一对一辅导笔记节选,我们来系统地了解C语言中与寄存器相关的内容。1.什么是寄存器?寄存器是位于CPU内部的小型、高速的存储单元,它们的访问速度远高于主内存。在执行程序时,常用的数据和指令经常被加载到这些寄存器中,以加速程序的运行。2.register关键字在......
  • 游戏开发入门——CocosCreator实现
    课程介绍课前介绍为什么要开这门课?其实市面上已经有很多关于游戏开发的课程了,而且都各有千秋。但是。目前市面上的编程课很多标榜的零基础,但是很多名词都没有做相应的解释。我觉得对于初学者来说,可能还是有些难度。课程和课程之间没有一个循序渐进的关系。学员无法通过学习......
  • Java从入门到精通-数组(二)
    4.数组的基本操作数组的基本操作包括遍历数组、填充替换数组元素、对数组进行排序、复制数组以及查询数组中的元素。•4.1遍历数组遍历数组是访问数组中所有元素的过程,通常使用循环完成。使用 for 循环遍历数组:int[]numbers={1,2,3,4,5};for(inti=0;i<numbers.l......
  • HTML零基础入门(1)
    博主主页:倔强的大蜗牛 ......
  • MongoDB 入门
    0x01概述MongoDB是一个基于分布式文件存储的开源数据库,由C++语言编写,提供了一个可扩展的高性能数据存储解决方案MongoDB是一个文档型数据库,属于非关系型数据库(NoSQL)的一种,其数据是以文档的形式来存储的文档(Document)在MongoDB中是一个非常重要的概念,类似MySQL中的......
  • 项目管理工具----普加项目管理中间件(PlusProject )入门教程(10):数据加载
    普加项目管理中间件是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。PlusProject提供了加载json数据方式来显示。规定的数据格式如下:{ UID:100, Name:'ProjectName', StartDate:'2007-01-01T08:00:00', Fin......
  • 项目管理工具----普加项目管理中间件(PlusProject )入门教程(11):msProject项目的导入和导
    普加项目管理中间件是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。.net下可以导入xml和.mpp,微软提供了Microsoft.Office.Interop.MSProject.dll,可以将mpp文件转换成xml格式,我们提供了Plusoft.dll对xml文件进行了......
  • 项目管理工具----普加项目管理中间件(PlusProject )入门教程(11):msProject项目的导入和导
    普加项目管理中间件是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。同样普加项目管理中间件提供了导出方法,可以导出XML格式的文件,这个文件可以在微软project中直接打开展示。varwin=newPlusProject.ExportPro......