基本概念
child::
npm模块
目录-入口-由此开始-大纲-总览-概括-枢纽-指导-指引-总领
梗概
指向原始笔记的链接
- 一个npm模块可以同时包含多种模块化方案
- npm模块有两种主流模块化方案: ES6模块化 ES module和CommonJS
模块化方案的选择
.js后缀的文件采用^d1bf78.cjs后缀的文件采用CommonJS.mjs后缀的文件采用ES6模块化 ES module
导入npm模块
commonjs下
- commonjs的语法只能导入cjs
- 动态导入可以导入esm或cjs
esm下
- esm的语法(包括动态导入)能导入esm或cjs
实例
got模块只提供esm导出,code-block-judge模块只提供cjs导出
main.cjs
// 不可使用 import
// import m1 from 'code-block-judge'
// import m2 from 'got'
async function main() {
// console.log(m1)
// console.log(m2)
let m3 = await import('code-block-judge')
console.log(m3)
let m4 = require('code-block-judge')
console.log(m4)
let m5 = await import('got')
console.log(m5)
// 不能require ESM
// let m6 = require('got')
// console.log(m6)
}
main()main.mjs
import m1 from 'code-block-judge'
import m2 from 'got'
async function main() {
console.log(m1)
console.log(m2)
let m3 = await import('code-block-judge')
console.log(m3)
// require不可用
// let m4 = require('code-block-judge')
// console.log(m4)
let m5 = await import('got')
console.log(m5)
// require不可用
// let m6 = require('got')
// console.log(m6)
}
main()main.js
因为该实例package.json中设置了type: commonjs,所以结果和.cjs后缀的是完全一样的