検索
ホームページウェブフロントエンドjsチュートリアルwebpack 4.0.0-beta.0 バージョンの新機能 (詳細なチュートリアル)

この記事では主に webpack 4.0.0-beta.0 バージョンの新機能を紹介し、参考にさせていただきます。

フロントエンドテクノロジーは近年急速に発展しており、私たちはこのトレンドの下で常に学習し、成長しています。フロントエンドテクノロジーの継続的な開発により、私たちは多くの利便性を享受してきました。たとえば、JSX の出現によりコンポーネント ツリーを記述する明確かつ直観的な方法が提供され、LESS/SASS の出現により CSS を記述する能力が向上し、AMD/CommonJS/ES6 の出現によりモジュール開発が容易になりました。ただし、これらのツールをブラウザ上で実行できるようにネイティブ言語に変換するには、他のツールを使用する必要があります。これらのさまざまなリソースをより適切に統合するには、パッケージ化ツールが必要であり、webpack はこの要求から生まれた製品です。
Webpack はモジュール パッケージャーとみなすことができます。これは、プロジェクトの構造を分析し、ブラウザーが直接実行できない JavaScript モジュールやその他の拡張言語 (Scss、TypeScript など) を見つけ、それらをブラウザーでの使用に適した形式にパッケージ化します。現在、webpack は合計 3 つの安定バージョンをリリースしています。 2017 年 8 月末から開始し、5 か月の開発サイクルを経て、webpack チームは最近、多数の新機能、バグ修正、問題改善を追加して webpack 4.0.0 のベータ版をリリースしました。 webpack に興味がある場合は、webpack 4.0.0-beta.0 の新機能について学びましょう。
追記: 以下のコードのデモ コードはすべて webpack 4.0.0-beta.0 に基づいています。

1. webpack v4.0.0-beta.0 をインストールします

yarn を使用する場合:

yarn add webpack@next webpack-cli --dev

npm を使用する場合:

npm install webpack@next webpack-cli --save-dev

2. webpack 4.0.0.beta の新機能の紹介.0

ここでは、きっと興味を持っていただける新機能をいくつか紹介します。この章を読んでもまだ満足できない場合は、ここで完全な変更ログを参照できます。

この章では、次のパートから webpack 4.0.0-beta.0 を紹介します。

2.1 環境

webpack実行環境のアップグレード。 Node.js 4 バージョンはサポートされなくなりました。ソース コードが上位の ECMAScript バージョンにアップグレードされました。

webpack package.json 設定に従って、サポートされている Node.js の最小バージョンが表示されます: "node": ">=6.11.5"

2.2 モジュール

webpack モジュール タイプと .mjs サポート:

長い間、JS は webapck の唯一のモジュール タイプです。このため、開発者は他の種類のファイルを効率的にパッケージ化することができません。現在、webpack には 5 つのモジュール タイプが実装されており、それぞれに独自の利点があり、必要に応じて使用できます (詳細は後述します)。

  1. javascript/auto: (webpack3 のデフォルト) すべての JS モジュール システム: CommonJS、AMD、ESM をサポートします。

  2. javascript/esm: EcmaScript モジュール。他のすべてのモジュール システムは使用できません (.mjs ファイルのデフォルト)。

  3. javascript/dynamic: CommonJS および EcmaScript モジュールはサポートされていません。

  4. json: JSON データ。require および import を通じてインポートできます (.json ファイルのデフォルト)。

  5. webassembly/experimental: WebAssembly モード (現在は実験段階、.wasm ファイルのデフォルト)。

使用法:

module.rules の type は、さまざまなモジュール タイプをサポートするために新しく追加された属性です。

 module: {
  rules: [{
    test: /\.special\.json$/,
    type: "javascript/auto",
    use: "special-loader"
  }]
 }

さらに、webpack は .wasm、.mjs、.js、および .json 拡張子の順序でファイルを解析するようになりました。

javascript/esm は javascript/auto よりも ESM の処理が厳密です:

これは 2 つの側面に反映されています: 1. インポートされた名前は、インポートされたモジュールに存在する必要があります。 2. 動的モジュール (CommonJS などの非 ESM) は、デフォルトのインポートを通じてのみインポートできます。他のすべてのインポート (名前空間のインポートを含む) はエラーを報告します。

2.3 使用方法

「開発または運用」でモードを選択する必要があります (すべての機能を無効にすることができる隠しモード none があります)。

1) 本番モードはリスニングをサポートしておらず、開発モードは高速増分再構築用に最適化されています。

2) 実稼働モードは、モジュールの連結、つまり変数のプロモーションもサポートしています (この機能は webpack 3 で実装されています)。
3) コメントとプロンプトは開発モードでサポートされ、eval のソース マップがサポートされます。

CLI を webpack-cli に移動します。CLI を使用するには、webpack-cli をインストールする必要があります。

optimization.* フラグを使用して独自のカスタム モードを構成できます。

webpackInclude と webpackExclude は魔法のアノテーションを介して import() をサポートでき、これにより動的表現を使用するときにファイルをフィルタリングできます。

System.import() を使用すると警告が発行されます:

1) Rule.parser.system:true を使用して警告をオフにできます。

2) Rule.parser.system:false を使用して System.import() をオフにすることもできます。

新しいプラグイン システムに移行されたプラグインの場合、ProgressPlugin にプラグイン名が表示されるようになりました。

webpack が JSON をネイティブに処理できるようになりました。ローダーを使用して json を js に変換する場合は、type: "javascript/auto" を設定する必要があります。もちろん、webpack はローダーなしでも正常に動作します。

2.4構成

いくつかの一般的な組み込みプラグインを削除しました:

1) NoEmitOnErrorsPlugin -> optimization.noEmitOnErrors (運用モードのデフォルト)。
2) ModuleConcatenationPlugin -> optimization.concatenateModules (運用モードのデフォルト)。
3) NamedModulesPlugin -> optimization.namedModules (開発モードのデフォルト)。

一般的に使用されている CommonsChunkPlugin を削除しました -> optimization.splitChunks キャッシュ戦略をきめ細かく制御する必要がある場合は、optimization.splitChunks と optimization.runtimeChunks を使用できます。 module.rules[].resolve を使用して解像度を設定できるようになりました。これはグローバル構成とマージされます。

optimization.minimize は最小化スイッチを制御するために使用されます。 デフォルトは、実稼働モードではオン、開発モードではオフです。

optimization.minimizer は、ミニマイザーとオプションを構成するために使用されます。

プレースホルダーをサポートする多くの構成オプションが、関数型フォームもサポートするようになりました。

options.dependency 設定が正しくない場合、例外がスローされるようになりました。

sideEffects は module.rules 経由でオーバーライドできます。

output.globalObject 構成オプションを追加して、実行時にグローバル オブジェクト参照を選択できるようにします。

デフォルトでは、Webpack はエントリ属性を ./src に、出力属性を ./dist に設定します。

module.loaders を削除します。

2.5 最適化

uglifyjs-webpack-plugin が v 1 にアップグレードされ、ES6 構文をサポートします。

sideEffects:falseはpackage.jsonで設定できます。このフィールドが設定されている場合、フラグは使用されるライブラリに副作用をもたらしません。これは、webpack がコードから再エクスポートを安全に削除できることを意味します。

JSONP 関数の代わりに JSONP 配列を使用 –> 非同期サポート。

新しい optimization.splitChunks オプションの導入。

Webpack は不要なコードを削除できます。以前は Uglify で不要なコードを削除できました。これにより、無駄なコードをインポートした後に発生するクラッシュを効果的に防止できます。

ここではいくつかの内部最適化を示します:
1) プラグイン呼び出しをタップ呼び出しに置き換えます (新しいプラグイン システム)。
2) 多くの放棄されたプラグインを新しいプラグイン システム API に移行します。
3) json モジュールに buildMeta.exportsType:default を追加します。
4) パーサーの未使用のメソッド (parserStringArray、parserownedStringArray) を削除しました。

2.6 パフォーマンス

デフォルトでは、UglifyJS はキャッシュと並列化をデフォルトに設定しています (キャッシュと並列化は完全には実装されておらず、webpack5 のマイルストーンです)。

プラグイン システムの新しいバージョンがリリースされたため、イベント フックとハンドラーが単一になりました。

複数のパフォーマンスの向上、特に増分リビルドの高速化。

RemoveParentModluesPlugin のパフォーマンスが向上しました。

2.7 互換性のない変更 (プラグイン、ローダー関連)

新しいプラグインシステム:

1) プラグインメソッドは下位互換性があります
2) プラグインは Compiler.hooks.xxx を使用する必要があります.tap(< ;プラグイン名>, fn)

Chunk.chunks/parents/blocks は配列ではなくなりました。コレクションを内部で使用し、それにアクセスするメソッドを備えています。

Parser.scope.renames と Parser.scope.settings はオブジェクト/配列ではなく、マップ/セットになりました。

パーサーは、配列の代わりに StackedSetMap (LevelDB に似たデータ構造) を使用します。

プラグインを適用するときにCompiler.optionsが設定されなくなりました。

すべてのモジュールの構築パラメータが変更されました。

オプションを ContextModule とsolveDependency のオプション オブジェクトに統合しました。

import() の依存関係を変更し、名前を変更しました。

Compiler.resolvers をプラグイン経由でアクセスできる Compiler.resolverFactory に移動しました。

Dependency.isEqualResource は、Dependency.getResourceIdentifier に置き換えられました。

Template メソッドはすべて静的です。

新しい RuntimeTemplate クラスが追加され、outputOptions と requestShortener がこのクラスに移動されました。

1) RuntimeTemplate の使用を置き換えるために、多くのメソッドが更新されました。
2) ランタイムにアクセスするコードをこの新しいクラスに移動する予定です

Module.meta は Module.buildMeta に置き換えられました

Module.buildInfo と Module.factoryMeta が追加されました

Module のいくつかのプロパティが移動されました新しいオブジェクト

に、コンテキストオプションを指すloaderContext.rootContextを追加します。ローダーはこれを使用して、アプリケーション ルートに関連するものを作成できます。

HMR が有効な場合、this.hot フラグをローダー コンテキストに追加します。

buildMeta.harmony は buildMeta.exportsType: 名前空間に置き換えられました。

チャンク グラフが変更されました:

以前: チャンクはネストされた依存関係で接続されていました。
現在: ChunksGroups の接続は参照依存関係に関連付けられており、順番に連結されています。
以前: AsyncDependencyBlocks はチャンクのリストを順番に参照していました。
現在: AsyncDependencyBlocks は ChunkGroup を参照します。

★★ 注: 上記の内容はすべて、ローダーとプラグインの大きな変更に関するものです。

3. 主要なアップデートの詳細な説明

3.1 デフォルト値の改善

直到今日,webpack 总是要求显式地设置 entry 和 output 属性。webpack 4.0.0-beta.0 中,webpack 会自动设定你的 entry 属性为 ./src 以及 output 的属性为 ./dist。
这意味着您不再需要配置文件来启动 webpack。接下来我们为你演示webpack 4.0.0-beta.0的便捷操作:

1、我们需要安装好 webpack 之后,在 package.json 中添加如下脚本即可启动:

 "scripts": {
  "build": "webpack"
 },

2、在工程中添加简单示例代码如下图(整个工程没有 webpack 配置文件,即可运行打包):

3、打包过程中我们发现有新特性的提示:

WARNING in configuration
The 'mode' option has not been set. Set 'mode' option to 'development' or 'production' to enable defaults for this environment.

这就是我们下节要说的内容模式设置。

★★ 注意:入口默认为 ./src 如果缺少此文件夹会报错!

> webpack --mode production
ERROR in Entry module not found: Error: Can't resolve './src' in 'D:\workspace\github\Webpack-Example'

3.2 模式设置

以往的项目使用 webpack3 脚手架生成项目初始模板都会有两个甚至三个配置文件,比如
webpack.base.conf.js、webpack.prod.conf.js、webpack.dev.conf.js 而现在可以做到一个配置文件都不需要,直接在启动命令中传入参数 --mode development | production 达到区分不同模式的效果。

接下来修改 package.json 设置不同的模式:

 "scripts": {
   "dev": "webpack --mode development",
   "build": "webpack --mode production"
 },

重新执行 npm run dev 或 npm run build 即可看到不同的打包结果:

我们可以看到两种模式的结果完全不同,下面我们会更深入的按照我们真实的需求来讲解一些常用配置。

接下来这个配置是最常用到的,我们使用 webpack 的主要目的之一就是为了更好的支撑前段模块化的能力,既然需要模块化当然少不了代码分割,目前代码分割有以下几种:

  1.  通过 entry 分割不同入口,常用于多页应用;

  2.  通过 CommonsChunkPlugin 插件来分割不同功能模块;

  3.  通过动态 import 来分割。

下面我们主要讲解 webpack 4.0.0-beta.0 版本的重大变化删除了 CommonsChunkPlugin 插件。

3.3 删除 CommonsChunkPlugin

webpack 4.0.0-beta.0删除了 CommonsChunkPlugin,以支持两个新的选项(optimization.splitChunks 和 optimization.runtimeChunk)。

从webpack 4.0.0-beta.0 开始分割 Chunk 将不在使用 CommonsChunkPlugin 插件,而是使用 optimization 配置项,具体的实现原理可以参考 CommonsChunkPlugin。

由于还没有正式官方文档出来,以下是我们通过实践出的 optimization 配置方法:
其中用到了新增的 splitChunks 属性,此属性看字面意思就明白是分割代码块的选项,其下可配置项已在下面示例代码中列出(有兴趣的朋友可以自行实践):

entry: {
   vendor: [&#39;lodash&#39;]
},
 
...
 
optimization: {
   splitChunks: {
   chunks: "initial", // 必须三选一: "initial" | "all"(默认就是all) | "async" 
   minSize: 0, // 最小尺寸,默认0
   minChunks: 1, // 最小 chunk ,默认1
   maxAsyncRequests: 1, // 最大异步请求数, 默认1
   maxInitialRequests : 1, // 最大初始化请求书,默认1
   name: function(){}, // 名称,此选项可接收 function
   cacheGroups:{ // 这里开始设置缓存的 chunks
     priority: 0, // 缓存组优先级
     vendor: { // key 为entry中定义的 入口名称
       chunks: "initial", // 必须三选一: "initial" | "all" | "async"(默认就是异步) 
       test: /react|lodash/, // 正则规则验证,如果符合就提取 chunk
       name: "vendor", // 要缓存的 分隔出来的 chunk 名称 
       minSize: 0,
       minChunks: 1,
       enforce: true,
       maxAsyncRequests: 1, // 最大异步请求数, 默认1
       maxInitialRequests : 1, // 最大初始化请求书,默认1
       reuseExistingChunk: true // 可设置是否重用该chunk(查看源码没有发现默认值)
     }
   }
 }
 },

以上就是 optimization.splitChunks 的所有可用的配置项属性。

总结

以上就是我们初步整理的关于 webpack 4.0.0-beta.0 的新特性,包含了一部分的官方更新日志的翻译,还有我们自己试验的一些属性。当然如果你有兴趣,也可以等到正式的官方文档发布之后进行实践。
如果上面的信息不能够完全满足你的兴趣,还请关注官方日志。在未来不到一个月的时间里,webpack 将对插件、加载器以及整个生态系统进行更加严格的测试,并发布最终的官方稳定版本。如果你喜欢 webpack,你可以参与使用 webpack 4.0.0-beta.0。测试阶段发现、解决的问题越多,正式版本才会更加稳定。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在angularjs数组中如何判断是否含有某个元素

在angular中如何使用json对象push到数组中的方法

在angularjs中如何实现table增加tr的方法

以上がwebpack 4.0.0-beta.0 バージョンの新機能 (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

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ヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)