JS

基本概念

child::

npm模块

目录-入口-由此开始-大纲-总览-概括-枢纽-指导-指引-总领

梗概

指向原始笔记的链接

模块化方案的选择

导入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后缀的是完全一样的