노드에서 가져오기 구문을 사용하는 방법에 대한 간략한 분석
node.js는 단순한 지식 포인트인 가져오기 구문을 지원하지만 지식 오해에서 벗어나 지식의 외부 세계에 더 많은 관심을 기울이고 끊임없이 우리 자신의 지식의 경계를 열어줄 수 있습니다.
js 모듈화
현재 주류 프런트엔드 모듈화 사양에는 다음이 포함됩니다.
- CommonJS, Node.js가 제안한 사양
- ECMAScript 모듈, ESM, ECMAScript가 제안한 JavaScript 표준 사양
- 제거된 것은 CMD, AMD 등이고, 그 다음이 복잡한 UMD(다양한 사양을 지원하는 모음)
따라서 두 가지 주류 사양인 CommonJS
와 ESM
두 가지 사양이 있지만 Node.js는 ESM
사양을 지원하지 않기 때문에 두 사양의 코드가 우리 프로젝트에 여러 번 공존하여 다음과 같은 상황이 발생합니다. CommonJS
和ESM
两种规范,但是由于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
import _ from 'lodash'; import { readFile } from 'fs'; import Demo from './Demo.mjs'; // 绝对路径或相对路径都可以 export readFile; export default readFile;로그인 후 복사.mjs
文件扩展名、package.json
中设置type=module
或node 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、常规方式:
// 由于参数不同, 这个会让`foo.mjs`被加载两次,而不会利用缓存中的`foo.mjs` import './foo.mjs?query=1'; // loads ./foo.mjs with query of "?query=1" import './foo.mjs?query=2'; // loads ./foo.mjs with query of "?query=2"
2、带参数的使用:
import 'data:text/javascript,console.log("hello!");'; // text/javascript 会将后面的内容当成js模块 import { test } from 'data:text/javascript,function test(){console.log("test")};export {test};'; // 这里我们是不是扩宽思路,直接加载在线js呢? import _ from 'data:application/json,"world!"' assert { type: 'json' }; // application/json 则是json // application/wasm for Wasm
3、支持data:
이렇게 개발 시 문제점이 발생하기 쉬우며, 특히 우리가 할 때 webpack
vite
와 같은 다양한 구성 도구를 통해 이를 해결하는 것이 우리 솔루션인 경우가 많습니다. 프로젝트에 노드를 작성하세요.js 컴파일 스크립트는 종종 전환이 필요합니다. [권장 관련 튜토리얼: nodejs 동영상 튜토리얼
]json
javascript
webassembly
import
export
및 기타 구문을 사용하고 마침내 오늘을 기다리시겠습니까? PS: 사실 이 기능은 Node.js V8.5 버전부터 추가되었지만 항상 전역 변수 –experimental-modules
를 통해 이 기능을 활성화해야 했습니다. 높은 불안정성으로 인해 대부분의 프로젝트는 켜지지 않았으나 16+부터는 프로젝트에서 대담하고 안전하게 사용할 수 있지만 일부 고대 프로젝트는 당분간 켜지지 않는 것이 좋습니다. 사용 방법
먼저 공식 웹사이트에서 관련 지침을 읽어보겠습니다:Node.js에는 두 가지 모듈 사양이 있습니다:위를 통해 여러 사용 방법을 알 수 있습니다:CommonJS
모듈 사양과ECMAScript</ 코드>모듈 사양 개발자는 <code>.mjs
파일 확장자package.json
을 통해type=module
또는node xxx.js --input을 설정할 수 있습니다. type
플래그는 Node.js에ECMAScript
사양을 사용하여 코드를 실행하도록 지시합니다. 이러한 설정이 없으면 Node.js는 실행을 위해CommonJS
를 사용합니다. Node.js 모듈: ECMAScript 모듈
.mjs
입니다. node.js가 로드되면 package.json</ 프로젝트의 <code>ESM
사양"type":"module"
을 추가하면 전체 프로젝트의 모든 .js 파일이 ESM
사양에 따라 실행됩니다. 실행 매개변수 --input-type
도 동일한 효과를 얻을 수 있습니다
import
或export
,不允许使用require
或module.exports
다양한 사용 방법
1. 일반 방법:
import fooData from './foo.json' assert { type: 'json' };
2.
import { default as cjs } from 'cjs'; // module.exports 导出 import cjsSugar from 'cjs'; // module.exports import * as m from 'cjs';
data:
형식 URL 형식const { default: barData } = await import('./bar.json', { assert: { type: 'json' } });
etc.import worker_threads from 'node:worker_threads';
import { configure, resize } from 'https://example.com/imagelib.mjs';
configure({ worker_threads });
const a = require('a') ^ ReferenceError: require is not defined in ES module scope, you can use import instead at file:///Users/borfyqiu/Desktop/study/github/qiubohong.github.io/code/demo-rollup/test.mjs:4:12 at ModuleJob.run (node:internal/modules/esm/module_job:193:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:530:24) at async loadESM (node:internal/process/esm_loader:91:5) at async handleMainPromise (node:internal/modules/run_main:65:12)
위 내용은 노드에서 가져오기 구문을 사용하는 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











nvm을 사용하여 노드를 삭제하는 방법: 1. "nvm-setup.zip"을 다운로드하여 C 드라이브에 설치합니다. 2. "nvm -v" 명령을 통해 환경 변수를 구성하고 버전 번호를 확인합니다. install" 명령 노드 설치; 4. "nvm uninstall" 명령을 통해 설치된 노드를 삭제합니다.

파일 업로드를 처리하는 방법은 무엇입니까? 다음 글에서는 Express를 사용하여 노드 프로젝트에서 파일 업로드를 처리하는 방법을 소개하겠습니다. 도움이 되길 바랍니다.

이 기사에서는 Node의 프로세스 관리 도구인 "pm2"를 공유하고 pm2가 필요한 이유, pm2 설치 및 사용 방법에 대해 설명합니다. 모두에게 도움이 되기를 바랍니다!

Pinetwork 노드에 대한 자세한 설명 및 설치 안내서이 기사에서는 Pinetwork Ecosystem을 자세히 소개합니다. Pi 노드, Pinetwork 생태계의 주요 역할을 수행하고 설치 및 구성을위한 전체 단계를 제공합니다. Pinetwork 블록 체인 테스트 네트워크가 출시 된 후, PI 노드는 다가오는 주요 네트워크 릴리스를 준비하여 테스트에 적극적으로 참여하는 많은 개척자들의 중요한 부분이되었습니다. 아직 Pinetwork를 모른다면 Picoin이 무엇인지 참조하십시오. 리스팅 가격은 얼마입니까? PI 사용, 광업 및 보안 분석. Pinetwork 란 무엇입니까? Pinetwork 프로젝트는 2019 년에 시작되었으며 독점적 인 Cryptocurrency Pi Coin을 소유하고 있습니다. 이 프로젝트는 모든 사람이 참여할 수있는 사람을 만드는 것을 목표로합니다.

nodejs 실행 파일을 pkg로 패키징하는 방법은 무엇입니까? 다음 기사에서는 pkg를 사용하여 Node 프로젝트를 실행 파일로 패키징하는 방법을 소개합니다. 도움이 되기를 바랍니다.

안녕하세요. 제 이름은 somenzz입니다. Zheng 형제라고 불러주세요. Python의 가져오기는 매우 직관적이지만 그럼에도 불구하고 패키지가 거기에 있음에도 불구하고 여전히 ModuleNotFoundError가 발생하는 경우가 있습니다. 상대 경로는 분명히 매우 정확하지만 ImportError:attemptedrelativeimportwithnoknownparentpackage 오류는 동일한 디렉터리에서 모듈을 가져오고 이 글은 가져오기를 사용할 때 자주 발생하는 몇 가지 문제를 분석하여 가져오기를 쉽게 처리하는 데 도움이 됩니다.

"node-gyp.js"와 "Node.js"의 버전이 일치하지 않아 npm node gyp가 실패했습니다. 해결 방법: 1. "npm 캐시 clean -f"를 통해 노드 캐시를 지웁니다. 2. "npm install - g n" n 모듈을 설치합니다. 3. "n v12.21.0" 명령을 통해 "node v12.21.0" 버전을 설치합니다.

싱글 사인온(SSO) 시스템이란 무엇입니까? nodejs를 사용하여 구현하는 방법은 무엇입니까? 다음 글에서는 Node를 사용하여 Single Sign-On 시스템을 구현하는 방법을 소개하겠습니다. 도움이 되길 바랍니다.
