大前端--模块化、WebPack

学习视频:
https://www.bilibili.com/video/BV1BU4y147pS?p=27

模块化

简介
模块化产生的背景
随着网站逐渐变成“互联网应用程序”,嵌入网页的JavaScript代码越来越大,越来越复杂。

JavaScript模块化编程,已经成为一个迫切的需求,理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。但是,,JavaScript不是一种模块化编程语言,它不支持“类”(class),包(package)等概念,也不支持“模块”(module)。

模块化规范

  • CommonJS规范
  • ES6模块化规范
CommonJS规范

每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。

1、创建module文件夹。全程在VSCode操作。
在这里插入图片描述
2、创建 四则运算.js

//工具类
const sum = function(a,b){
    return a+b;
}
const sub = function(a,b){
    return a-b;
}
const mul = function(a,b){
    return a*b;
}
const di = function(a,b){
    return a/b;
}
//导出给别人使用
module.exports = {
    // sum: sum,
    // sub: sub,
    sum,
    sub,
    mul,
    di
}

创建 导入测试.js

// require
const c = require('./四则运算.js');

//必须要在四则运算.js中导出了,这边才能使用
console.log(c.sum(7,8));
console.log(c.sub(55,8));
console.log(c.di(654,2));
console.log(c.mul(7,87));

运行命令:node .\导入测试.js 。运行结果:
在这里插入图片描述

ES6模块化规范

ES6使用 export 和 import 来导出、导入模块
1、创建 module-ES6 文件夹
在这里插入图片描述
2、创建 userApi.js 文件,做导出模块

export function getList(){
    //真实业务中,异步获取数据
    console.log("获取数据列表");
}
export function save(){
    //保存数据
    console.log("保存数据");
}

3、创建 userTest.js 文件,做导入模块

//导入模板
import {getList,save} from './userApi.js';
//使用
getList();
save();
//默认不支持ES6语法,得初始化工程才可以。

先初始化工程,不然直接执行会报错
在这里插入图片描述
初始化:npm init -y
在这里插入图片描述
然后在package.json配置 脚本命令 和 创建 .babelrs

运行脚本命令还需要创建src文件夹
在这里插入图片描述
脚本命令 "build": "babel src -d dist"
在这里插入图片描述
.babelrs
在这里插入图片描述
再安装解码器:npm install --save-dev babel-preset-es2015
在这里插入图片描述
最后运行:npm run build
在这里插入图片描述
运行后会生成dist文件和一些依赖
在这里插入图片描述
可以执行一下dist目录下的userTest.js
在这里插入图片描述
可以看出这个需要babel支持。
但是这个比较麻烦,每次都需要导入模块。

所以ES6出台了新的东西
新建module-ES6-2,将module-ES6中的src下的js文件复制到module-ES6-2中

改写userApi.js

//实际开发中就经常是这种代码
export default{
    getList(){
        //真实业务中,异步获取数据
        console.log("获取数据列表");
    },
    save(){
        //保存数据
        console.log("保存数据");
    }
}

// export function getList(){
//     //真实业务中,异步获取数据
//     console.log("获取数据列表");
// }
// export function save(){
//     //保存数据
//     console.log("保存数据");
// }

改写userTest.js

//ES6语法,使用对象导入模板
import user from './userApi.js';
//导入模板
// import {getList,save} from './userApi.js';
//使用
user.getList();
user.save();

为了避免重复上面的安装解码器等一系列的操作,直接把两个js文件复制到module-ES6的src中
然后直接再build一下
在这里插入图片描述
再回到 module-ES6/src/userTest.js看

'use strict';
var _userApi = require('./userApi.js');
var _userApi2 = _interopRequireDefault(_userApi);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//导入模板
// import {getList,save} from './userApi.js';
//使用
_userApi2.default.getList(); //ES6语法,使用对象导入模板
_userApi2.default.save();
//默认不支持ES6语法,得初始化工程才可以。

再次运行的结果和上面的一样打印出来两行文字。

WebPack

什么是WebPack
WebPack是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
从图中我们可以看出,WebPack可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。
在这里插入图片描述
JS打包
打开命令窗口,全局安装webpack:cnpm install -g webpack webpack-cli
在这里插入图片描述
查看是否安装成功:webpack -v
在这里插入图片描述
1、创建webpackStudy
初始化项目:npm init -y
在这里插入图片描述
定义src文件夹,在里面新建util.js文件、common.js文件和入口文件main.js文件
在这里插入图片描述
util.js

//求和,相加
exports.add = (g,h)=> g + h;

common.js

//导出
exports.info = function(str){
    //控制台输出
    console.log(str);
    //浏览器输出
    console.log(str);
}

main.js

//导入util.js
const util = require("./util");
//导入common.js
const common = require("./common");
//打印信息,往控制台输出和往浏览器输出
common.info("Console export," + util.add(51346,25634));

新建webpack.config.js文件

//导入path模块  nodejs内置模块
const path = require("path");
//定义js打包规则
module.exports = {
    //入口函数,从哪里开始进行编译打包
    entry: "./src/main.js",
    //编译成功后把内容输出到哪里去
    output: {
        //定义输出的指定的目录__dirname当前项目根目录,产生一个dist文件夹
        path:path.resolve(__dirname,"./dist"),
        //合并的js文件存储在dist/bundle.js文件中
        filename:"bundle.js"
    }
}

运行 webpack,但是报错了
在这里插入图片描述
解决方法

首先以管理员身份运行VSCode,如果不执行这一步就会报另外一个错误
在这里插入图片描述
这个报错就是没有修改注册表的权限。这是由于PowerShell执行策略问题
在这里插入图片描述
然后修改运行权限:set-ExecutionPolicy RemoteSigned
在这里插入图片描述
执行完成查看 dist/bundle.js,出现以下内容

(()=>{var o={648:(o,n)=>{n.info=function(o){console.log(o),console.log(o)}},891:(o,n)=>{n.add=(o,n)=>o+n}},n={};function r(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return o[e](s,s.exports,r),s.exports}(()=>{const o=r(891);r(648).info("Console export,"+o.add(51346,25634))})()})();

新建 dist/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>
    <script src="bundle.js"></script>
</body>
</html>

右键运行之后去浏览器查看结果
在这里插入图片描述
webpack帮助文档:webpack -h
webpack监听:webpack -w
CSS打包
1、安装style-loader和css-loader

Webpack 本身只能处理JavaScript模块,如果要处理其他类型的文件,就需要使用loader进行转换

Loader可以理解为 模块和资源的转换器

首先需要安装相关Loader插件

  • css-loader : 将css装载到JavaScript
  • style-loader : 让JavaScript认识css

安装命令:npm install --save-dev style-loader css-loader
在这里插入图片描述
安装完成后会在package.json中出现这两个依赖

2、修改webpack.config.js
在output后面添加一段代码

 module:{
        rules:[{
            test:/\.css$/,//把项目中所有的 .css 结尾的文件进行打包
            use:["style-loader","css-loader"]
        }]
    }

3、创建 src/style.css

body{
    background: goldenrod;
    font-size: 78px;
    color: black;
}

4、修改main.js,在第一行引入 style.css

//导入css
require("./style.css");

5、浏览器中查看index.html,看背景颜色是否改变
在这里插入图片描述

Vue-element-admin

vue-element-admin是一个后台前端解决方案,它基于vue和element-ui实现,它使用了罪行的前端技术栈,内置了i18国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型,相信不管你的需求是什么,本项目都能帮助到你。

官网:https://panjiachen.github.io/vue-element-admin-site/zh/guide/
运行工程和编译工程

# 克隆项目
git clone https://github.com/PanJiaChen/vue-element-admin.git
# 不建议用cnpm安装。下面解决速度慢问题
npm install --registry=https:registry.npm.taobao.org

在这里插入图片描述
完成之后就会看到vue-element-admin已经被下载下来了。
在这里插入图片描述
用VSCode打开后,首先先把依赖下载下来:npm install

但是报错了,因为本地生成的SSH keys添加到github里面,,这个生成的SSH keys 是带有密码的

克隆别的项目下来,没有对方的邮箱,所以…

npm ERR! code 128
npm ERR! command failed
npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/nhn/raphael.git
npm ERR! git@github.com: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.

npm ERR! A complete log of this run can be found in:  

解决方法:https://cloud.tencent.com/developer/article/1883101

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Webpack 是一个非常流行的 JavaScript 模块打器,它可以将多个模块打成一个或多个 bundle,并且支持各种模块类型,括 JavaScript、CSS、LESS 等。 如果你想在 webpack 中使用 LESS,可以按照以下步骤进行配置: 1. 安装需要的依赖: ``` npm install less less-loader css-loader style-loader --save-dev ``` 2. 在 webpack 的配置文件中添加以下 loader 配置: ```javascript module: { rules: [ { test: /\.less$/, use: [ { loader: "style-loader" }, { loader: "css-loader" }, { loader: "less-loader" } ] } ] } ``` 上述配置的含义是:首先使用 less-loader 将 LESS 文件编译为 CSS 文件,然后使用 css-loader 将 CSS 文件转换为 JavaScript 模块,最后使用 style-loader 将 JavaScript 模块中的 CSS 插入到 HTML 页面的 style 标签中。 3. 在 JavaScript 模块中导入 LESS 文件: ```javascript import './style.less'; ``` 上述代码会将 style.less 文件打到 JavaScript 模块中,并且在 HTML 页面中自动插入对应的样式。 通过上述步骤,你就可以在 webpack 中使用 LESS 进行模块化开发了。 ### 回答2: webpack是一个前端模块化的打工具,而less是一种动态样式语言。结合webpack和less可以实现样式的模块化。 在使用webpack进行less的模块化时,首先需要安装相关的依赖,括`style-loader`、`css-loader`和`less-loader`。这些loader可以帮助webpack识别和加载less文件。 一般情况下,我们会在Webpack配置文件中配置loader规则,告诉webpack如何处理less文件。可以通过`rules`字段添加相应的loader,例如: ```javascript module: { rules: [ { test: /\.less$/, use: [ 'style-loader', 'css-loader', 'less-loader' ] } ] } ``` 这样webpack在打时就会根据规则,将引入的less文件转换成CSS并插入到HTML中。 在less文件中,可以通过`@import`语句引入其他的less文件,实现样式的模块化。例如: ```less @import 'variables.less'; @import 'mixins.less'; body { background-color: @primary-color; color: @secondary-color; } ``` 通过这种方式,可以将样式按照功能或组件进行拆分,使得代码更加结构化和可维护。 总而言之,webpack和less可以很好地结合,实现前端代码的模块化。使用webpack进行打和加载模块,再结合less进行样式的模块化,可以提高开发效率和代码的可维护性。 ### 回答3: webpack是一个用于打前端资源的工具,而LESS是一种预编译CSS的语言。它们可以通过配置实现模块化。 在webpack的配置文件中,我们可以使用相应的loader来处理LESS文件。通过配置loader,webpack可以将LESS文件转换成CSS文件。同时,我们可以将CSS文件模块化地引入到我们的项目中。 在使用LESS时,我们可以将样式拆分为多个模块,每个模块含特定的样式规则。这样做的好处是能够提高代码的可维护性和重用性。通过使用@import语句,我们可以将多个LESS文件导入到主文件中,这样所有的样式规则都会被打到一个CSS文件中。 在webpack配置文件中,我们可以使用LESS loader来转换LESS文件为CSS文件,并通过style loader将CSS插入到HTML中。通过配置extract-text-webpack-plugin插件,我们还可以将CSS提取为单独的文件,而不是将其嵌入到HTML中。 另外,使用webpack模块化功能,我们可以通过配置alias,将指定的导入路径映射为真实路径。这样,在导入LESS文件中的模块时,我们只需要通过相对路径来引用它们,而不需要关心真实路径。 总结而言,通过webpack和LESS的配置,我们可以实现前端资源的模块化。这种模块化的设计可以提高项目的可维护性和重用性,同时也方便了开发者的工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值