찾다

Webpack 경험 공유

Feb 02, 2018 pm 02:28 PM
webwebpack경험

webpack은 모듈 번들러입니다. 주요 목표는 JavaScript 파일을 함께 패키지하는 것입니다. 패키지된 파일은 브라우저에서 사용되지만 변환, 번들 또는 패키지에도 사용할 수 있습니다. 이 기사는 주로 Webpack을 여러분과 공유하므로 모든 사람에게 도움이 되기를 바랍니다. .

Caching

캐싱을 위해 max-age + cdn과 결합된 [name].[contenthash:8].js 파일 이름을 생성합니다. [name].[contenthash:8].js,结合 max-age + cdn 做缓存。

网页加载

html

以前是固定的一个 html, html -》版本号 js 文件(通过webpack打出来的)-》通过版本号确定具体 js。(现在想想不太合理,虽然没和后台耦合这么重)

现在是变动的 html,通过 HtmlWebpackPlugin 打出来(webpack 生成,里面包含版本号的 js)

这样还省了一个串行时间(拉版本号文件)。 同时也便于做灰度,比如发布了需求,让一部分用户先体验,动态打出 html 给到后台即可。(固定 html 则没这么轻松做)

css分离

在观麦,css变动会非常的少,这得益于 react-gm 对类名的完善。 既然变动少,把 css 单独出来也不错,使用 ExtractTextPlugin 分离 css。

分离后减少 js 大小,不阻塞 js,同时 css 和 js 可同时拉取。

common

new CommonsChunkPlugin({name: 'commons'})

看打包后的 common 代码,会发现其他模块的id和hash都会打在common中,这样每次 commons 文件都会变,就很难做缓存了。

提供两个文件列表即可,会发现 webpack 吧 id 和 hash 打在 manifest 文件中。这样commons就可以缓存了。btw,没看到官网有介绍,看到的说声。

new CommonsChunkPlugin({names: ['commons', 'manifest']})

本地开发

讲讲代理,本地开始是自己起的服务,没有后台服务,自然需要代理到某个地方。 可通过 devServer.proxy 。也可代理到外网排查 bug,都是源码,查 bug 非常快。

"proxy": {
    "/ticket/*": {
      "target": "http://dev.guanmai.cn:7413",
      "changeOrigin": true
    }
}

打包速度

DllPlugin

当项目大了后,必然需要打很多包,导致打包时间非常长。 官方推荐做法是把不常变动的文件打DLL。

我们工程就把  react react-dom prop-types classnames mobx mobx-react lodash moment big.js 等打进来。

网上资料都介绍 dll 的 文件名是 [name]_[hash].dll.js, 我们是 [npm version]_dll.js npm version

웹 페이지 로딩

html

예전에는 고정된 html, html -> 버전 번호 js 파일(webpack을 통해 입력) -> 버전 번호를 통해 특정 js를 판별합니다. (백엔드와 크게 결합되지는 않았지만 지금 생각해보면 말이 안 됩니다.)

이제는 HtmlWebpackPlugin을 통해 입력되는 변경된 html입니다(webpack에 의해 생성되고 버전 번호가 있는 js가 포함됨). )

이렇게 하면 일련 시간도 절약됩니다(버전 번호 파일 가져오기). 동시에 그레이 스케일을 수행하는 것도 편리합니다. 예를 들어 요구 사항을 게시하는 경우 일부 사용자가 먼저 경험하게 한 다음 html을 동적으로 입력하여 백그라운드로 보냅니다. (html 수정이 쉽지 않네요)

css 분리

Guanmai에서는 React-gm의 클래스 이름 개선 덕분에 CSS 변경이 거의 없을 것입니다. 변경사항이 거의 없기 때문에 CSS를 분리하고 ExtractTextPlugin을 사용하여 CSS를 분리하는 것도 나쁘지 않습니다.

분리 후에는 js의 크기가 줄어들고 js가 차단되지 않는 동시에 CSS와 js를 동시에 가져올 수 있습니다.

common

rrreee

패키징된 Common 코드를 보면 다른 모듈의 ID와 해시가 공통으로 입력되어 Commons 파일이 매번 변경되어 캐시하기 어려운 것을 알 수 있습니다.

두 개의 파일 목록만 제공하면 webpack이 매니페스트 파일에 ID와 해시를 저장하는 것을 확인할 수 있습니다. 이런 식으로 커먼즈를 캐시할 수 있습니다. 그런데, 공식 홈페이지에는 소개가 하나도 없었는데, 알고 계시면 알려주세요.

rrreee

로컬 개발

에이전트에 대해 이야기해 보겠습니다. 로컬 서비스는 백그라운드 서비스가 없으므로 당연히 어딘가에 에이전트가 있어야 합니다. devServer.proxy를 통해 사용 가능합니다. 또한 에이전트를 이용하여 외부 네트워크에 접속하여 버그를 확인할 수도 있습니다. 모두 소스 코드이므로 버그 확인이 매우 빠릅니다.

rrreee

패키징 속도

DllPlugin

프로젝트가 커지면 필연적으로 많은 패키지가 필요하게 되어 패키징 시간이 매우 길어집니다. 공식적으로 권장되는 접근 방식은 자주 변경되지 않는 파일을 DLL로 만드는 것입니다.

우리 프로젝트는 react react-dom prop-types classnames mobx mobx-react lodash moment big.js 들어올 때까지 기다리세요.

온라인 정보에는 모두 dll의 파일명이 [이름]_[hash].dll.js라고 소개되어 있습니다. 우리는 package.json 버전에서 [npm 버전]_dll.js npm 버전을 읽습니다.

해시를 사용하지 않고 npm 버전을 사용하는 것이 어떨까요? 2차 패키징을 고려할 때 문제가 발생했습니다. DLL을 다시 패키징해야 하는지 판단하는 방법은 무엇입니까? 해시인 경우 어떻게 해야 합니까(해결책을 추천해 주십시오). npm 버전을 사용한다면 버전이 바뀌자마자 리패키징을 하게 됩니다. 예를 들어, React가 업그레이드되면 버전+를 갖고 리패키징을 하게 됩니다.

happypack

happypack은 빌드 속도를 크게 향상시키며, 여러 스레드로 패키징할 수 있으며 캐시도 재구축 속도를 높여줍니다.

devtool

개발용 평가, 프로덕션용 소스 맵(디스플레이 문제 해결, 패키징 속도 희생, 허용 범위 내에서 사용)

babel-loader

cacheDirectory 기억


noParse && alias

일부 라이브러리 필요하지 않은 경우 noParse 구성은 구문 분석되지 않으며 별칭은 x.min.js 파일을 가리킵니다.

나무 흔들기

는 아직 사용하지 않아서 아직은 때가 아닌 것 같은 느낌입니다. 좋은 글이 있어요. @2.x. 이제 webpack이 별도로 나왔고, 캐시 지원, 멀티 코어 압축 등 더 많은 기능을 가지고 있는데, 꽤 빨랐습니다. webpack.optimize.UglifyJsPlugin은 실제로 uglifyjs-webpack-plugin입니다.

이상한 점은 공식적으로 uglify-es를 기반으로 한다는 것입니다. 하지만 종속성은 여전히 ​​uglify-js라고 생각합니다. 기묘. UglifyJsParallelPlugin

🎜 정식 출시 전에는 멀티코어를 지원하는 webpack-uglify-parallel을 사용했습니다. 속도는 uglifyjs-webpack-plugin과 크게 다르지 않습니다. 🎜🎜글을 작성하면서 github을 뒤져보니 7월에 폐기되어 공식 홈페이지에 통합된 것을 발견했습니다. 🎜🎜Others🎜🎜babel의 babel-minify-webpack-plugin은 옆에 있어주세요. 🎜🎜Script cdn🎜🎜일부 js(gm-fetch babel-polyfill)에는 변경 사항이 거의 없습니다. webpack으로 패키징하는 것은 약간 낭비적입니다. cdn을 통해 얻어서 html 문서에 스크립트 형식으로 넣을 수 있습니다. 🎜🎜분석🎜🎜차트도 있고 매우 직관적인 분석도 있습니다. 나는 그것을 선호한다. 🎜webpack-monitor🎜🎜이전 버전은 webpack-bundle-analyzer🎜🎜관련 권장 사항: 🎜🎜🎜webpack을 사용하여 프런트 엔드 프로젝트를 구축하기 위한 웹 예제 코드🎜🎜🎜🎜 webpack 구성 방법 요약🎜🎜

node.js의 npm 및 webpack 구성 방법에 대한 자세한 설명

위 내용은 Webpack 경험 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
너무 많은 색상 링크너무 많은 색상 링크Apr 13, 2025 am 11:36 AM

최근에 색상에 대한 도구, 기사 및 리소스가 많이있었습니다. 당신의 즐거움을 위해 여기에 반올림하여 몇 개의 탭을 닫을 수 있습니다.

Flexbox에서 자동 마진이 작동하는 방법Flexbox에서 자동 마진이 작동하는 방법Apr 13, 2025 am 11:35 AM

Robin은 이전에 이것을 다루었지만 지난 몇 주 동안 그것에 대해 약간의 혼란을 듣고 다른 사람이 설명하는 데 찌르는 것을 보았습니다.

움직이는 무지개가 강조합니다움직이는 무지개가 강조합니다Apr 13, 2025 am 11:27 AM

나는 샌드위치 사이트의 디자인을 절대적으로 좋아합니다. 많은 아름다운 특징 중에는 무지개가있는이 헤드 라인이 스크롤 할 때 움직이는 밑줄이 있습니다. 그것은 아닙니다

새해, 새 직업? 그리드 구동 이력서를 만들자!새해, 새 직업? 그리드 구동 이력서를 만들자!Apr 13, 2025 am 11:26 AM

많은 인기있는 이력서 디자인은 그리드 모양으로 섹션을 배치하여 사용 가능한 페이지 공간을 최대한 활용하고 있습니다. CSS 그리드를 사용하여 레이아웃을 만듭니다

너무 많이 재 장전하는 습관에서 사용자를 해소하는 한 가지 방법너무 많이 재 장전하는 습관에서 사용자를 해소하는 한 가지 방법Apr 13, 2025 am 11:25 AM

페이지 새로 고침은 일입니다. 때로는 반응이 없다고 생각하거나 새로운 콘텐츠를 사용할 수 있다고 생각할 때 페이지를 새로 고침합니다. 때때로 우리는 단지 화가났습니다

React를 사용한 도메인 구동 설계React를 사용한 도메인 구동 설계Apr 13, 2025 am 11:22 AM

React 세계에서 프론트 엔드 애플리케이션을 구성하는 방법에 대한 지침은 거의 없습니다. (“옳은 느낌”이 될 때까지 파일을 움직여도 롤). 진실

비활성 사용자 감지비활성 사용자 감지Apr 13, 2025 am 11:08 AM

대부분의 경우 사용자가 응용 프로그램에 적극적으로 참여하거나 일시적으로 비활성화되어 있는지에 대해 신경 쓰지 않습니다. 비활성, 의미, 아마도 그들

Wufoo ZapierWufoo ZapierApr 13, 2025 am 11:02 AM

Wufoo는 항상 통합으로 훌륭했습니다. 캠페인 모니터, MailChimp 및 Typekit과 같은 특정 앱과 통합이 있지만

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.