首页前端开发其他前端知识node中如何使用import语法(node.js import)

node中如何使用import语法(node.js import)

时间2023-03-29 16:41:13发布访客分类其他前端知识浏览1122
导读:这篇文章主要介绍了node中如何使用import语法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇node中如何使用import语法文章都会有所收获,下面我们一起来看看吧。 js模块...
这篇文章主要介绍了node中如何使用import语法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇node中如何使用import语法文章都会有所收获,下面我们一起来看看吧。

js模块化

前端主流模块化规范,目前有以下几种:

  • CommonJS, Node.js提出的规范

  • ECMAScript Module,ESM,由ECMAScript组织提出的JavaScript标准规范

  • 已淘汰的有:CMD、AMD等,再就综合体UMD(支持各种规范的集合体)

因此,主流有两种规范CommonJSESM两种规范,但是由于Node.js不支持ESM规范,导致很多时候我们的项目里面并存两种规范的代码,从而出现下面这种情况:

//在node端执行构建的时候
const_=require('loadsh')

//在浏览器端实现的时候
import_from'loadsh';
    

这样子开发就很容易出现痛点,往往我们的解决方案就是通过各种构建工具去解决,如:webpack vite,尤其是我们在写项目中写node.js编译脚本,经常需要切换。【相关教程推荐:nodejs视频教程、编程教学】

但是从Node.js V14+版本后,它开始支持ESM规范啦,你可以直接在Node.js中使用import export等语法了,终于等到这一天?。

PS: 其实早在Node.js V8.5版本就已经加入该特性了,只不过一直需要通过全局变量–experimental-modules去开启这一特性,由于不稳定性大多数项目都没有开启,不过自从16+后,我们就可以大胆放心在项目中使用了,不过一些古老的项目建议暂时不用开启。

怎么使用

我们先从官网上去看相关使用说明:

Node.js 有两个模块规范:CommonJS模块规范 和 ECMAScript模块规范 开发者可以通过 .mjs 文件扩展名、package.json中设置type=modulenode xxx.js --input-type 标志告诉 Node.js 使用 ECMAScript规范去执行代码。 如果没这些设置,Node.js 将使用 CommonJS 去执行。Node.js Modules: ECMAScript modules

通过上述我们就可以知道几个使用方式:

  • 将文件后缀改为.mjs,node.js加载的时候自动会用ESM规范

  • 在项目中package.json新增配置项"type":"module",那么整个项目中的.js文件都会按照ESM规范去执行

  • 增加执行参数--input-type也可以实现相同效果

各种使用方式

1、常规方式:

import_from'lodash';


import{
readFile}
    from'fs';
    

importDemofrom'./Demo.mjs';
    //绝对路径或相对路径都可以

exportreadFile;
    
exportdefaultreadFile;
    

2、带参数的使用:

//由于参数不同,这个会让`foo.mjs`被加载两次,而不会利用缓存中的`foo.mjs`
import'./foo.mjs?query=1';
    //loads./foo.mjswithqueryof"?query=1"
import'./foo.mjs?query=2';
    //loads./foo.mjswithqueryof"?query=2"

3、支持data:格式URL的形式

import'data:text/javascript,console.log("hello!");
    ';
//text/javascript会将后面的内容当成js模块
import{
test}
from'data:text/javascript,functiontest(){
console.log("test")}
    ;
export{
test}
    ;
    ';
//这里我们是不是扩宽思路,直接加载在线js呢?

import_from'data:application/json,"world!"'assert{
type:'json'}
    ;
    //application/json则是json

//application/wasmforWasm

4、assert断言(实验特性) 将文件强制加载为某种格式内容,如:json javascript webassembly

importfooDatafrom'./foo.json'assert{
type:'json'}
    ;
    

5、加载commonjs规范模块

当然肯定也支持加载commonjs规范的模块,用法如下:

import{
defaultascjs}
    from'cjs';
    //module.exports导出
importcjsSugarfrom'cjs';
    //module.exports
import*asmfrom'cjs';
    

6、import() 异步导入 这种用法就很正常,不需要实时加载,等到需要用的时候再加载

const{
default:barData}
=
awaitimport('./bar.json',{
assert:{
type:'json'}
}
    );
    

7、支持从http/https引入(实验特性)

目前属于实验特性,有限制,比如:

  • 不支持http2/3协议

  • http协议只能用于127.0.0.1等本地ip地址

  • Cookie、Authorization等信息不会携带发送

  • 只会加载执行远端的js文件,而不会加载远端中依赖其他文件

importworker_threadsfrom'node:worker_threads';

import{
configure,resize}
    from'https://example.com/imagelib.mjs';

configure({
worker_threads}
    );
    

限制

唯一的限制:当开启ESM规范后,你只允许填写importexport,不允许使用requiremodule.exports,会报一下错误:

consta=require('a')
^
ReferenceError:requireisnotdefinedinESmodulescope,youcanuseimportinstead
atfile:///Users/borfyqiu/Desktop/study/github/qiubohong.github.io/code/demo-rollup/test.mjs:4:12
atModuleJob.run(node:internal/modules/esm/module_job:193:25)
atasyncPromise.all(index0)
atasyncESMLoader.import(node:internal/modules/esm/loader:530:24)
atasyncloadESM(node:internal/process/esm_loader:91:5)
atasynchandleMainPromise(node:internal/modules/run_main:65:12)

关于“node中如何使用import语法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“node中如何使用import语法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

nodeimport

若转载请注明出处: node中如何使用import语法(node.js import)
本文地址: https://pptw.com/jishu/749.html
微信小程序window导航栏配置的方法是什么(微信小程序window导航栏配置的方法是什么意思) javascript中的History对象如何使用(javascript history对象)

游客 回复需填写必要信息