Teng's blog Teng's blog
首页
Java
H5前端
GitHub (opens new window)
首页
Java
H5前端
GitHub (opens new window)
  • 快速入门

    • 基本使用
    • 模块化
      • 模块化规范
      • ES6模块化规范
        • 导出模块
        • 导入模块
      • 使用Babel转码
        • 安装 cli
        • 初始化项目 npm init -y
        • 配置 .babelrc
        • 安装转码器
        • 进行转码
        • 运行转码后文件
  • Framework-NPM
  • 快速入门
Shetengteng
2021-11-30

模块化

随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂 Javascript模块化编程,已经成为一个迫切的需求 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块

# 模块化规范

CommonJS模块化规范(基于ES6语法之前)

ES6模块化规范(使用ES6语法)

# ES6模块化规范

ES6使用 export 和 import 来导出、导入模块

# 导出模块

创建一个示例文件夹demo,在文件夹下创建src/A.js文件

export default {
    methodA() {
        console.log('A....')
    },

    methodB() {
        console.log('B...')
    }
}
1
2
3
4
5
6
7
8
9
  • 其他导出方式
export function methodA(){
    console.log('A....')
}

export function methodB(){
    console.log('B...')
}
1
2
3
4
5
6
7

# 导入模块

创建文件src/B.js文件

import a from "./A"
a.methodA()
a.methodB()
1
2
3

直接运行报错,nodejs只能执行es5规范的js,因此需要进行转码

node B.js


import A from "./A"
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1031:15)
    at Module._compile (node:internal/modules/cjs/loader:1065:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMai
1
2
3
4
5
6
7
8
9
10
11
12
13
14

其他导入方式

import {methodA,methodB} from "./A"

methodA()
methodB()
1
2
3
4

# 使用Babel转码

ES6的某些高级语法在浏览器环境甚至是Node.js环境中无法执行

Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行执行

# 安装 cli

Babel提供babel-cli工具,用于命令行转码

npm install -g babel-cli
1

查看是否安装成功

  • 注意:在vscode的终端中有安全限制,输入会报错,在其他终端可以尝试
babel --version
1

# 初始化项目 npm init -y

在之前文件夹下,src文件夹的父文件夹中,初始化项目,如

D:\note\GitHub\my-demos\demo-npm\02.模块化\demo> npm init -y
1

# 配置 .babelrc

Babel的配置文件是.babelrc,存放在项目的根目录下

该文件用来设置转码规则和插件,presets字段设定转码规则

{
    "presets": [
        "es2015"
    ],
    "plugins": []
}
1
2
3
4
5
6

# 安装转码器

在demo目录下安装

D:\note\GitHub\my-demos\demo-npm\02.模块化\demo> npm install -D babel-preset-es2015
1

# 进行转码

转码后,生成dist文件夹

# 整个目录转码
# --out-dir 或 -d 参数指定输出目录
babel src -d dist
1
2
3

# 运行转码后文件

查看转码后文件

  • A.js
'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = {
    methodA: function methodA() {
        console.log('A....');
    },
    methodB: function methodB() {
        console.log('B...');
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
  • B.js
"use strict";

var _A = require("./A");

var _A2 = _interopRequireDefault(_A);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

_A2.default.methodA();
_A2.default.methodB();
1
2
3
4
5
6
7
8
9
10
  • 在dist文件夹中运行B.js
D:\note\GitHub\my-demos\demo-npm\02.模块化\demo\dist> node B.js
A....
B...
1
2
3
Last Updated: 2022/01/16, 11:29:51
基本使用

← 基本使用

Theme by Vdoing | Copyright © 2021-2022 Shetengteng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式