최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요?
NodeDocker 이미지를 선택하는 것은 작은 일처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?
FROM node:latest
또는 단지 FROM node
를 사용하면 잠재적인 위험을 무시하기 쉽습니다. 전반적인 보안 위험을 모르고 이를 CI/CD 프로세스에 도입하면 의심할 여지없이 위험이 악화됩니다. [추천 관련 튜토리얼: FROM node:latest
或只是FROM node
时,很容易忽略他潜在的风险。如果你不知道总体的安全风险并且把他引入到了CI/CD的流程中,那无疑是加剧了这个风险。【相关教程推荐:nodejs视频教程、编程教学】
下面这个例子非常典型,你可以从很多教程或者博客文章中看到这个Node.js Dockerfile的配置。但是这个Dockerfile的配置存在很大的问题,非常不推荐这样使用:
FROM node WORKDIR /usr/src/app COPY . /usr/src/app RUN npm install CMD "npm" "start"
译者注:如果需要跳过分析直接看结论,请直接滑到文末。
一个可供选择Node.js Docker镜像
当你构建一个Node.js镜像的时候,实际上有很多选择。其中就包括了Node.js核心团队维护的官方Docker镜像,以及从特定的基础镜像中选择的特殊Node.js镜像版本。还可以选择其他的,比如谷歌在distroless
项目上构建的Node.js应用程序,或者是Docker官方团队提供的一个名为scratch
的镜像。
在这些Node.js的Docker镜像中,哪一个是最适合你的呢?
让我们一个一个的去分析,了解更多他们的好处和潜在风险。
作者注:在这篇文章中,我将会比较18.2.0这个版本的Node.js镜像,他的发布时间是2022年6月左右。
默认的Node.js镜像
我们先从维护的node镜像开始。它是由进行正式地维护的,包含了一些基础的镜像tag。这些tag对应到不同的底层发行版(Debian、Ubuntu、Alpine)以及不同版本的Node.js运行时本身。还有针对不同CPU架构的特定版本tag,例如amd64
和arm64x8
(新版苹果的M1)。
Debian发行版中最常见的node
镜像,例如bullseye
或buster
,他们都是基于由另一个团队维护的buildpack-deps
的。
当你基于这个默认的node
镜像构建Node.js Docker镜像时会发生什么?
FROM node
使用docker build --no-cache -f Dockerfile1 -t dockerfile1
构建镜像时,就会出现下面这些:
- 我们没有指定Node.js运行时版本,所以
node
是node:last
的一个别名,他的版本指向的是18.2.0
- 这个Node.js Docker镜像大小是952MB
这个最新的Node.js镜像的依赖和安全漏洞足迹是什么呢?我们可以用docker scan dockerfile1
来运行一个Synk-powered
容器,就会得到下面的结果:
- 共有409个依赖项 - 这些是使用操作系统包管理器检测到的开源库,比如
curl/libcurl4
、git/git-man
、imagemagick/imagemagick-6-common
。 - 共有289个安全问题在这些依赖中被发现,例如,
Buffer Overflows
、use-after-free errors
、out-of-bounds write
等。 - Node.js 18.2.0运行时版本容易出现7个安全问题。例如,
DNS Rebinding
、HTTP Request Smuggling
、Configuration Hijacking
nodejs 비디오 튜토리얼 , 프로그래밍 교육
🎜🎜🎜다음 이 예제는 매우 일반적입니다. 많은 튜토리얼이나 블로그 게시물에서 이 Node.js Dockerfile의 구성을 볼 수 있습니다. 그러나 이 Dockerfile의 구성에는 큰 문제가 있으므로 이 방법으로 사용하는 것은 적극 권장되지 않습니다:
🎜🎜번역가의 메모: 분석을 건너뛰고 바로 다음으로 이동해야 하는 경우: 결론을 내리려면 기사 끝 부분까지 직접 스크롤하십시오. 🎜FROM node:bullseye复制代码로그인 후 복사로그인 후 복사
선택할 수 있는 Node.js Docker 이미지
🎜Node.js 이미지를 빌드할 때 실제로 선택할 수 있는 옵션이 많습니다. 여기에는 Node.js 핵심 팀에서 관리하는 공식 Docker 이미지뿐만 아니라 특정 기본 이미지에서 선택된 특수 Node.js 이미지 버전도 포함됩니다.distroless
프로젝트에서 Google이 구축한 Node.js 애플리케이션이나 공식 Docker 팀에서 제공하는 scratch
라는 이미지 등 다른 것을 선택할 수도 있습니다. 🎜🎜이 Node.js Docker 이미지 중에서 귀하에게 가장 적합한 이미지는 무엇입니까? 🎜🎜 하나씩 분석하여 이점과 잠재적 위험에 대해 자세히 알아보세요. 🎜🎜🎜작성자 노트: 이번 글에서는 2022년 6월쯤 출시될 Node.js 18.2.0 버전의 이미지를 비교해보겠습니다. 🎜🎜🎜🎜기본 Node.js 이미지
🎜유지관리 노드 이미지부터 시작해 보겠습니다. 에서 공식적으로 관리하며 몇 가지 기본 이미지 태그를 포함합니다. 이러한 태그는 다양한 기본 배포판(Debian, Ubuntu, Alpine) 및 Node.js 런타임 자체의 다양한 버전에 해당합니다.amd64
및 arm64x8
(Apple M1의 새 버전)과 같은 다양한 CPU 아키텍처에 대한 특정 버전 태그도 있습니다. 🎜🎜bullseye
또는 buster
와 같은 Debian 배포판에서 가장 일반적인 노드
이미지는 다른 팀 >buildpack에서 관리하는 를 기반으로 합니다. -뎁스
. 이 기본
노드
이미지를 기반으로 Node.js Docker 이미지를 빌드하면 어떻게 되나요? 🎜FROM node:bullseye-slim
docker build --no-cache -f Dockerfile1 -t dockerfile1
을 사용하여 이미지를 빌드하면 다음이 나타납니다. 🎜- Node.js를 지정하지 않았습니다. 런타임 버전이므로
node
는node:last
의 별칭이고 해당 버전은18.2.0
🎜 - 이 Node.js를 가리킵니다. Docker 이미지 크기는 952MB입니다🎜🎜🎜이 최신 Node.js 이미지의 종속성과 보안 취약점 발자국은 무엇입니까?
docker scan dockerfile1
을 사용하여동기화 기반
컨테이너를 실행할 수 있으며 다음과 같은 결과를 얻을 수 있습니다. 🎜- 총 409개의 종속성이 있습니다.
curl/libcurl4
,git/git-man
,imagemagick/imagemagick-6-common과 같이 운영 체제의 패키지 관리자가 감지한 오픈 소스 라이브러리를 사용합니다.
>. 🎜 - 이러한 종속성에서
버퍼 오버플로
,use-after-free 오류
,범위 초과 등 총 289개의 보안 문제가 발견되었습니다. 쓰기
등. 🎜 - Node.js 18.2.0 런타임 버전에는 7가지 보안 문제가 발생하기 쉽습니다. 예를 들어
DNS 리바인딩
,HTTP 요청 스머글링
,구성 하이재킹
🎜🎜🎜🎜번역자 메모: 🎜- Buffer Overflows - 缓冲区溢出
- Use After Free - 一种内存破坏漏洞,通常存在于浏览器中
- out-of-bounds write - 越界写入
- DNS Rebinding - DNS重绑定攻击
- HTTP Request Smugglin - HTTP请求夹带攻击技术
- Configuration Hijacking - 配置劫持
你真的需要在Node.js镜像中给你的应用提供
wget
、git
、curl
吗?在Node.js Docker镜像中,有成百上千个依赖和工具,而这些依赖又对应着成百上千个漏洞。Node.js运行时的特性对应着7个不同的安全漏洞,给潜在攻击留下了很大的空间。总的来说,情况并不是很乐观。Node.js Docker Hub选项node:buster vs node:bullseye
如果你在Node.js Docker Hub仓库上浏览可用tags,你将会发现有两个Node.js镜像tags -
node:buster
和node:bullseye
。这两个Docker镜像tags都基于Debian发行版。
buster
镜像tag对应着Debian10,将会在2022年8月到2024年进入到他的End of Life日期,所以buster
不是一个很好的选择。bullseye
镜像tag对应着Debian11,被当做Debian的当前稳定版本,预计EOL日期为2026年6月。译者注:
- End of Life。特指产品寿命的结束,通常缩写为EOL。
因此,十分建议你将所有新的和现有的Node.js Docker镜像从
node:buster
迁移到node:bullseye
或者其他合适的可替代版本。
我们先构建一个新的Node.js Docker镜像基于:FROM node:bullseye复制代码
로그인 후 복사로그인 후 복사如果你构建了这个Node.js Docker镜像tag并且与之前使用
node:latest
的结果进行比较,将会得到完全相同的大小、依赖数量和发现的漏洞。原因是node
、node:latest
、node:bullseye
全部指向了同一个正在构建的Node.js镜像tag。Node.js镜像tag瘦身
官方的Node.js团队还维护了一个显式地针对功能性Node.js环境所需工具的镜像tag并且不会存在其他的东西。
这个Node.js镜像tags是通过
slim
镜像tag变量来引用的,比如node:bullseye-slim
,或者带有Node.js指定版本,像node:14.19.2 -slim
。我们再来基于Debian的当前稳定版本的
bullseye
构建一个Node.jsslim
镜像:FROM node:bullseye-slim
로그인 후 복사로그인 후 복사- 镜像的大小已经急剧下降,从接近1GB的容器镜像降到246MB的镜像大小
- 扫描他的内容也显示了整体软件足迹的大幅下降,只有97个依赖项和56个漏洞。
就容器镜像大小和安全状况而言,
node:bullseye-slim
已经是一个比较好的起点了。一个LTS的Node.js Docker镜像
到目前为止,我们的Node.js Docker镜像基于当前版本的Node.js,即Node.js18。但是根据Node.js的发布时间表,这个版本直到2022年10月才进入正式的
Active LTS
状态。译者注:LTS - Long-term support,即长期支持版本。
如果我们总是依赖于我们正在构建的Node.js Docker镜像中的LTS版本的话会怎么样?我们先更新这个Docker镜像tag并构建一个新的Node.js镜像:
FROM node:lts-bullseye-slim
로그인 후 복사瘦身后的Node.js LTS版本(16.15.0)在镜像上带来了相似数量的依赖、安全漏洞和一个略小的体积(188MB)。
因此,尽管你可能需要在LTS和当前Node.js运行时版本中选择,但他们都不会对Node.js镜像的软件占用空间有大的影响。
node:alpine对于Node.js镜像来说是一个更好的选择吗?
Node.js Docker团队维护了一个
node:alpine
镜像tag以及他的变体,以便将Alpine Linux发行版的特定版本与Node.js运行时的特定版本进行匹配。Alpine Linux项目经常因为其非常小的镜像体积而被引用,小体积意味着更新的软件占用空间和更少的漏洞,确实十分不错。
下面的命令会让Dockerfile去生成一个node环境,这个将会增加未压缩的镜像体积:FROM node:alpine
로그인 후 복사这个将会产生一个178MB大小的docker镜像,和
slim
Node.js镜像大小差不多,但是在alpine
镜像tag中,只检测到了16个系统依赖漏洞和2个安全安全漏洞。这就意味着alpine
镜像tag对于小体积和漏洞数量来说是一个比较好的选择。alpine
对Node.js镜像可能提供了一个较小的镜像体积和更少的漏洞数量。但是,我们必须意识到Alpine项目使用musl
作为C标准库的实现。而Debian的Node.js镜像tag依赖于glibc
实现,比如bullseye
和slim
。这些差异可以解释性能问题、功能性的bug或者是潜在的应用程序崩溃,这些都是由于底层C库的差异造成的。选择一个
alpine
的Node.js镜像tag意味着你实际上是在选择一个非官方的Node.js运行时。Node.js Docker团队并不会正式支持基于alpine
的容器镜像构建。因此,他声明基于Alpine的镜像tag是实验性的,并且可能和官方的构建不一致。如果你正在选一个一个基于Alpine的Node.js Docker镜像,需要记住一点,Docker安全工具(例如Trivy或Snyk)目前无法检测到Alpine镜像中与运行时相关的漏洞的。虽然这种情况未来可能会改变,但是目前还不能找到Node.js18.2.0
alpine
基础镜像tag的安全漏洞,而18.2.0运行时本身实际上是容易受到攻击的。这与安全工具本身有关,而不是与Alpine基础镜像有关,但是也应该考虑到这一点。Node.js的
distroless
(无损)Docker镜像我们的基准测试的最后一个比较项目是谷歌的Distroless容器镜像。
什么是
distroless
容器镜像?这种镜像甚至比
slim
的Node.js镜像更加小,因为distroless
镜像只针对这个应用和应用运行时的依赖性而已。因此,一个distroless
的docker镜像没有容器包管理器、shell、或者其他通用工具的依赖性,这使得它们的体积更小,漏洞也更少。幸运的是,Distroless项目为Node.js维护了一个特殊运行时的
distroless
docker镜像,通过其完整的命名空间识别为grc.io/distroless/nodejs-debian11
,并且可以在谷歌的容器注册表中找到(这个是gcr.io
的部分)。因为Distroless容器镜像没有软件,我们可以使用一个docker的多阶段工作流来为我们的容器安装依赖项,并且把它们复制到Distroless镜像:
FROM node:16-bullseye-slim AS build WORKDIR /usr/src/app COPY . /usr/src/app RUN npm install FROM gcr.io/distroless/nodejs:16 COPY --from=build /usr/src/app /usr/src/app WORKDIR /usr/src/app CMD ["server.js"]
로그인 후 복사构建这个
distroless
docker镜像将产生112MB的文件,而在slim
和alpine
镜像tag来说,这已经减小了很多文件的体积了。
如果你正在考虑使用distroless
docker镜像,有一些重要的事项需要注意:- 好的一点是,它们是基于当前稳定的Debian发行版本,这意味着它们是最新的,很久才会到EOL的日期。
- 因为它们是基于Debian的,所以它们依赖
glibc
实现,并且不太可能在生产环境出现一些奇怪的问题。 - 你很快就会发现Distroless团队没有维护细粒度的Node.js运行时版本。这意味着你需要依赖于通用的
nodejs:16
的标记(该标记经常更新),或者在一个特定时间点根据镜像的SHA256哈希值进行安装。
Node.js Docker镜像tags的比较
我们可以参考下面的表格来总结不同Node.js Docker镜像tags之间的比较:
이미지 태그 Node.js 런타임 버전 OS 종속성 OS 보안 취약점 높고 심각한 취약점 중간 취약점 낮은 취약점 Node.js 런타임 취약점 이미지 크기 실 사용 가능 node 18.2.0 409 289 54 18 217 7 952MB 네 node:bullseye 18.2.0 409 289 54 18 217 7 952MB 예 node:bullseye-slim 18.2.0 97 56 4 8 44 7 246MB 예 node:lts-bullseye-slim 16.15.0 97 55 4 7 44 6 188MB 예 노드:alpine 18.2.0 16 2 2 0 0 0 178MB 예 gcr.io/distroless/nodejs:16 16.17.0 9 11 0 0 11 0 112MB 아니요 有时候,镜image大小也很要。更准确地说,我们的目标不是拥有最작은 체형, 而是拥有最작은 것整体软件種整体软件種没有太大的区别,而且它们对于一个容器镜image来说平均大概是200MB。当然,
slim
镜image적软件·용상对于alpine
来说还是相当高的(slim
97만 VSalpine
16만) ),因此,漏洞数weight对于alipne
来说也更高(slime
56个 VSslpine
2个)。안전漏洞
slim
镜像tags和alpine
没有太大的区别,而且它们对于一个容器镜像来说平均大概是200MB。当然,slim
镜像的软件占用相对于alpine
来说还是相当高的(slim
97个 VSalpine
16个),因此,漏洞数量对于alipne
来说也更高(slime
56个 VSslpine
2个)。安全漏洞
漏洞是一个重要的问题,并且一直是很多文章的中心——关于你为什么应该减少容器镜像的大小。
忽略
node
和node:bullseye
这种由于较大的软件占用而跟着增加安全漏洞的镜像,我们可以更关注稍微小一点的镜像类型。在slim
、alpine
、distroless
之间对比,高危和关键安全漏洞的绝对数量并不高,范围在0到4之间,这是一个可控的风险,并不会影响到你的应用程序。本质内容?
最理想的Node.js Docker镜像应该是一个基于现代Debian OS的操作系统的精简版本,它有一个稳定且活跃的Node.js长期支持版本。
归根结底就是选择
node:lts-bullseye-slim
Node.js镜像tag。我赞成使用确定性图像标记,因此我要做的细微更改是使用实际的底层版本号,而不是lts
别名。最理想的Node.js Docker镜像tag是
**node:16.17.0-bullseye-slim**
。如果你在一个成熟的开发团队工作,该团队可以支持自定义基础镜像,那么我的第二个最佳建议是选择谷歌的
distroless
镜像tag,因为它保持了glibc
漏洞是一个重要的问题,并且一直是很多文章的中心——关于你为什么应该减少容器镜应该减少容器镜의 상상의대소。忽略노드
및노드:과녁
code>这种由于较大的软件而跟着增加漏洞的镜型,我们可以更关注稍微小一点的镜image类型。여기슬림
、alpine
、distroless
间对比, 高危 and 关键security 漏洞的绝对数weight并不高,范围在0到4之间, 这是一个可控的风险, 并不会影响到你的应用程序。本质内容?
最理想的Node.js Docker镜应该是一个基于现代Debian OS의 운영 체제에 맞는 精简版本, 它有一个稳定且活跃的Node.js长期支持版本。🎜🎜归根结底就是选择node:lts-bullseye-slim
Node.js镜imagetag层版本号,而不是lts别name。🎜🎜🎜最理想的Node.js Docker镜imagetag是🎜**node:16.17.0-bullseye-slim**
🎜。🎜🎜🎜如果你재一个成熟的开发团队工작품, 该团队可以支持自己义基础镜 Image, 那么我的第二个最佳建议是选择谷歌的distroless
镜imagetag,因为它保持了glibc code>对官方Node.js运行时版本的兼容性. 🎜nodejs 教程🎜!🎜
위 내용은 최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
- 총 409개의 종속성이 있습니다.

핫 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)

뜨거운 주제











PHP와 Vue: 프론트엔드 개발 도구의 완벽한 조합 오늘날 인터넷이 빠르게 발전하는 시대에 프론트엔드 개발은 점점 더 중요해지고 있습니다. 사용자가 웹 사이트 및 애플리케이션 경험에 대한 요구 사항이 점점 더 높아짐에 따라 프런트 엔드 개발자는 보다 효율적이고 유연한 도구를 사용하여 반응형 및 대화형 인터페이스를 만들어야 합니다. 프론트엔드 개발 분야의 두 가지 중요한 기술인 PHP와 Vue.js는 함께 사용하면 완벽한 도구라고 볼 수 있습니다. 이 기사에서는 독자가 이 두 가지를 더 잘 이해하고 적용할 수 있도록 PHP와 Vue의 조합과 자세한 코드 예제를 살펴보겠습니다.

인터넷 기술이 발전하면서 프론트엔드 개발이 점점 더 중요해지고 있습니다. 특히 모바일 장치의 인기는 효율적이고 안정적이며 안전하고 유지 관리가 쉬운 프런트 엔드 개발 기술을 요구합니다. 빠르게 발전하는 프로그래밍 언어로서 Go 언어는 점점 더 많은 개발자가 사용하고 있습니다. 그렇다면 프론트엔드 개발에 Go 언어를 사용하는 것이 가능할까요? 다음으로 이 글에서는 프론트엔드 개발에 Go 언어를 사용하는 방법을 자세히 설명하겠습니다. 먼저 프론트엔드 개발에 Go 언어가 사용되는 이유를 살펴보겠습니다. 많은 사람들이 Go 언어가 언어라고 생각합니다.

프론트엔드 개발 인터뷰에서 일반적인 질문은 HTML/CSS 기초, JavaScript 기초, 프레임워크 및 라이브러리, 프로젝트 경험, 알고리즘 및 데이터 구조, 성능 최적화, 크로스 도메인 요청, 프론트엔드 엔지니어링, 디자인 패턴, 새로운 기술 및 트렌드. 면접관 질문은 후보자의 기술적 능력, 프로젝트 경험, 업계 동향에 대한 이해를 평가하기 위해 고안되었습니다. 따라서 지원자는 자신의 능력과 전문성을 입증할 수 있도록 해당 분야에 대한 충분한 준비를 갖추어야 합니다.

Django는 빠른 개발과 깔끔한 방법을 강조하는 Python으로 작성된 웹 애플리케이션 프레임워크입니다. Django는 웹 프레임워크이지만 Django가 프런트엔드인지 백엔드인지에 대한 질문에 답하려면 프런트엔드와 백엔드의 개념에 대한 깊은 이해가 필요합니다. 프론트엔드는 사용자가 직접 상호작용하는 인터페이스를 의미하고, 백엔드는 HTTP 프로토콜을 통해 데이터와 상호작용하는 서버측 프로그램을 의미합니다. 프론트엔드와 백엔드가 분리되면 프론트엔드와 백엔드 프로그램을 독립적으로 개발하여 각각 비즈니스 로직과 인터랙티브 효과, 데이터 교환을 구현할 수 있습니다.

JPA 란 무엇입니까? JDBC와 어떻게 다른가요? JPA(JavaPersistence API)는 ORM(객체 관계형 매핑)을 위한 표준 인터페이스로, 이를 통해 Java 개발자는 데이터베이스에 대해 직접 SQL 쿼리를 작성하지 않고도 친숙한 Java 객체를 사용하여 데이터베이스를 작동할 수 있습니다. JDBC(JavaDatabaseConnectivity)는 데이터베이스에 연결하기 위한 Java의 표준 API로, 개발자가 데이터베이스를 작동하려면 SQL 문을 사용해야 합니다. JPA는 JDBC를 캡슐화하고 객체 관계형 매핑을 위한 보다 편리하고 높은 수준의 API를 제공하며 데이터 액세스 작업을 단순화합니다. JPA에서 엔터티란 무엇입니까? 실재

C# 개발자로서 우리의 개발 작업에는 일반적으로 프런트엔드와 백엔드 개발이 포함됩니다. 기술이 발전하고 프로젝트의 복잡성이 증가함에 따라 프런트엔드와 백엔드의 공동 개발이 점점 더 중요해지고 복잡해졌습니다. 이 문서에서는 C# 개발자가 개발 작업을 보다 효율적으로 완료하는 데 도움이 되는 몇 가지 프런트 엔드 및 백엔드 공동 개발 기술을 공유합니다. 인터페이스 사양을 결정한 후 프런트엔드와 백엔드의 공동 개발은 API 인터페이스의 상호 작용과 분리될 수 없습니다. 프론트엔드와 백엔드 협업 개발이 원활하게 진행되기 위해서는 가장 중요한 것은 좋은 인터페이스 사양을 정의하는 것입니다. 인터페이스 사양에는 인터페이스 이름이 포함됩니다.

빠르고 효율적인 프로그래밍 언어인 Go 언어는 백엔드 개발 분야에서 널리 사용됩니다. 그러나 Go 언어를 프런트엔드 개발과 연관시키는 사람은 거의 없습니다. 실제로 프런트엔드 개발에 Go 언어를 사용하면 효율성이 향상될 뿐만 아니라 개발자에게 새로운 지평을 열어줄 수도 있습니다. 이 기사에서는 프런트엔드 개발에 Go 언어를 사용할 수 있는 가능성을 살펴보고 독자가 이 영역을 더 잘 이해할 수 있도록 구체적인 코드 예제를 제공합니다. 전통적인 프런트엔드 개발에서는 사용자 인터페이스를 구축하기 위해 JavaScript, HTML, CSS를 사용하는 경우가 많습니다.

프론트엔드 ESM이란 무엇입니까? 프론트엔드 개발에서 ESM은 ECMAScript 사양을 기반으로 한 모듈식 개발 방법인 ECMAScriptModules를 참조합니다. ESM은 더 나은 코드 구성, 모듈 간 격리, 재사용성과 같은 많은 이점을 제공합니다. 이 기사에서는 ESM의 기본 개념과 사용법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. ESM의 기본 개념 ESM에서는 코드를 여러 모듈로 나눌 수 있으며 각 모듈은 다른 모듈에 대한 일부 인터페이스를 노출합니다.
