webpack 4学習ノート(一)
8962 ワード
前言
これは私が数週間かけてwebpack 4を勉強した学習ノートです.内容が細かくなくて、比較的簡単なので、勝手に持って行きました.文章が皆さんに役に立つことを願っています.間違いがあれば、速やかに指摘してほしい.例はlearn-webpack倉庫にあります.もしあなたがそこから収穫があれば、
小さな知識
source-map
プロジェクトにスタイルを追加したい場合、
このときは
webpack-dev-server
webpack-dev-server
ホット・アップデートのためのサービスの開始
今のように書くのは面倒です(vue-cli 2もそうです).以前のバージョンでは
Hot Module Replacement
ホットスワップは、ページ全体がリフレッシュされません.ホットアップデートを使用しない場合は、いくつかの機能を操作して3つの要素を追加し、スタイルページを変更して自動的にリフレッシュすると、さっき追加した要素は消えます.熱交換がオンになったら、元のdomはまだあります.
なぜcssファイルを修正したのかmodule.hotを書く必要はありません.jsを書くには書く必要があります.css-loaderは自動的に処理してくれたからです.
babel
基本的な使い方
高バージョンのjsコードを低バージョンのjsコードに変換します.例えばieブラウザはes 6に互換性がなく、babelを使用してes 6コードをjsを低バージョンのjsコードに変換する必要があります.インストール:
さらに低いバージョンに下げる必要がある場合は、
サードパーティ製ライブラリを開発する場合は、クラスライブラリ.
構成を追加する場合
corejsを2インストールに割り当てる場合:
reactにbabelを適用する
インストール:
注意:変換は先から下へ、preset-reactを使用してreactコードを変換し、preset-envでjsコードをes 5コードに変換します.
これは私が数週間かけてwebpack 4を勉強した学習ノートです.内容が細かくなくて、比較的簡単なので、勝手に持って行きました.文章が皆さんに役に立つことを願っています.間違いがあれば、速やかに指摘してほしい.例はlearn-webpack倉庫にあります.もしあなたがそこから収穫があれば、
github
点のstar
をください.小さな知識
npm info webpack
webpackの履歴バージョン情報を表示するなどのnpm init -y
はそれらのオプションをスキップし、デフォルトのグローバルインストールのwebpack
:webpack index.js
パッケージプロジェクトにインストールされているwebpack
: npx webpack index.js
パッケージscript
スクリプトパッケージ:npm run build
コマンドラインパッケージ:npx webpack index.js -o bundle.js
エントリはindex.js
です.出口はbundle.js
webpack4
設置mode:production
圧縮コードdevelopment
非圧縮コードパッケージ output
内の[name].js loader
中のname
変数は実はentry:{main: index.js} key => main
ですsource-map
devtool: source-map
source-map
:dist
フォルダにはmap
接尾辞ファイルが複数生成されます.このようにページが間違っている場合は、間違った後のアドレスをクリックすると、コードが書かれている場所にジャンプします.パッケージされたコードにジャンプすることはありません.inline-source-map
:.mapファイルは新しく生成されません.パッケージされたファイルの下部cheap-inline-source-map
に挿入されます.inline-source-map
が間違っていると、何行目かの文字が表示されます.前にcheap
を付けると、いくつかの行cheap-module-inline-source-map
しか教えてくれません.もともとmapはパッケージされたindex.jsとビジネスコードの関係しかマッピングされません.サードパーティがライブラリを導入してエラーを報告してもマッピングできません.真ん中にmoduleというパラメータを入れればいいです.例えばloader
にもsource-map
が開発されている場合は、cheap-module-eval-source-map
、eval
は独立してmapファイルを生成するのではなく、コードにパッケージ化することをお勧めします.一般development
環境用cheap-module-eval-source-map
production
環境用cheap-module-source-map
loader // style.css
body {
color: red;
}
プロジェクトにスタイルを追加したい場合、
import ./style.css
がcss
をインポートし、パッケージコマンドを実行するとき.ページへの併記エラーERROR in ./style.css 1:5
Module parse failed: Unexpected token (1:5)
You may need an appropriate loader to handle this file type.
このときは
loader
を使用してコンパイルする必要があります.インストール:npm i style-loader css-loader -D
なぜstyle-loader
をインストールする必要があるのですか?style-loader
はあなたのスタイルをstyle
のラベルでページに挿入するので、webpack.config.js
を構成します.// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: "development",
entry: './index.js',
output: {
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin()
]
}
HtmlWebpackPlugin
を使用したのは、index.html
のページアクセスを自動的に生成するためです.// package.json
"scripts": {
"build": "webpack --config webpack.config.js"
},
npm run build
を実行してパッケージ化し、dist
ディレクトリの下のindex.html
にアクセスすると、ページ表示に成功したことがわかります.loader
実行順序は、下から上、右から左です.webpack-dev-server
webpack-dev-server
webpack-dev-server
はあなたのコードをパッケージ化し、パッケージの内容をメモリに入れ、自動的にパッケージ化してdistに入れることはありません.webpack —watch
ページが更新され、自動的に更新されますwebpack-dev-server
現在のページが自動的に更新されますwebpack-dev-server
、現在のwebpack-dev-server
は以前よりずっとよくなった.vue-cli3
およびreact
はこれを使っていますdevServer: {
contentBase: './dist', // ,
open: true, //
port: 8080, //
proxy: {'/api': http://localhost:3000}
}
ホット・アップデートのためのサービスの開始
npm install express webpack-dev-middleware -D
output
にpublicPath
を追加const express = require('express')
const webpack = require('webpack')
const webpackDevMiddleWare = require('webpack-dev-middleware')
const config = require('./webpack.config.js')
const complier = webpack(config) // ,webpack config
app.use(webpackDevMiddleware(complier, {
publicPath: config.output.publicPath, // ,
}))
const app = express()
app.listen(3000, () => {
console.log('server is running 3000')
})
今のように書くのは面倒です(vue-cli 2もそうです).以前のバージョンでは
webpack-dev-server
はまだ強くないので、今は違います.とても強くなりました.Hot Module Replacement
ホットスワップは、ページ全体がリフレッシュされません.ホットアップデートを使用しない場合は、いくつかの機能を操作して3つの要素を追加し、スタイルページを変更して自動的にリフレッシュすると、さっき追加した要素は消えます.熱交換がオンになったら、元のdomはまだあります.
const webpack = require('webpack')
// ....
devServer: {
contentBase: './dist',
open: true,
hot: true,
hotOnly: true // hot , , ,hot
},
// ...
plugins: [
new webpack.HotModuleReplacementPlugin()
]
import number from './number.js'
if (module.hot) { //
// ,
module.hot.accept('./number', () => {
// dosomething
})
}
なぜcssファイルを修正したのかmodule.hotを書く必要はありません.jsを書くには書く必要があります.css-loaderは自動的に処理してくれたからです.
babel
基本的な使い方
高バージョンのjsコードを低バージョンのjsコードに変換します.例えばieブラウザはes 6に互換性がなく、babelを使用してes 6コードをjsを低バージョンのjsコードに変換する必要があります.インストール:
npm install --save-dev babel-loader @babel/core
module: {
rules: [
{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
]
}
babel-loader
は、es 6構文を低レベルの構文に変換するのに役立ちません.Webpackとbabelのつながりをつなぐのに役立つだけです.es 5に変換する構文:インストール:npm install @babel/preset-env --save-dev
@babel/preset-env
は、es 6がes 5に変換するすべてのルールを含む.module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
"presets": ["@babel/preset-env"]
}
}
]
}
さらに低いバージョンに下げる必要がある場合は、
babel-polyfill
を使用してインストールする必要があります.npm install --save @babel/polyfill
ページの上部にimport "@babel/polyfill";
を導入すると、高度なバージョン構文を低レベル構文に変換できます.しかし、直接import
はパッケージされたファイルを非常に大きくします.この時点でwebpack.config.js
useBuiltInsを再構成する必要があります{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
// "presets": ["@babel/preset-env"]
// babel-polyfill , , ,
// , babel
"presets": [["@babel/preset-env", {
useBuiltIns: 'usage'
}]]
}
}
サードパーティ製ライブラリを開発する場合は、クラスライブラリ.
babel-polyfill
を使用すると、グローバルに注入され、グローバル環境に汚染されます.取付:npm install --save-dev @babel/plugin-transform-runtime
取付:npm install --save @babel/runtime
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
構成を追加する場合
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
"plugins": [["@babel/plugin-transform-runtime", {
"absoluteRuntime": false,
"corejs": false,
"helpers": true,
"regenerator": true,
"useESModules": false
}]]
}
}
corejsを2インストールに割り当てる場合:
npm install --save @babel/runtime-corejs2
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
"plugins": [["@babel/plugin-transform-runtime", {
"absoluteRuntime": false,
"corejs": 2,
"helpers": true,
"regenerator": true,
"useESModules": false
}]]
}
}
@babel/plugin-transform-runtime
は、グローバル環境を汚染しません.babelの構成が非常に多い場合は、.babelrc
ファイルに配置し、ルートディレクトリの下で.babelrc
ファイルを作成し、options
のコードをこのファイルに配置することができます.以下のようにします.{
"plugins": [["@babel/plugin-transform-runtime", {
"absoluteRuntime": false,
"corejs": 2,
"helpers": true,
"regenerator": true,
"useESModules": false
}]]
}
reactにbabelを適用する
インストール:
npm install --save-dev @babel/preset-react
先ほどの.babelrc
ファイルに構成を追加// presets , , , , , babel
{
"presets": [
["@babel/preset-env", {
"useBuiltIns": "usage"
}],
"@babel/preset-react"
]
}
注意:変換は先から下へ、preset-reactを使用してreactコードを変換し、preset-envでjsコードをes 5コードに変換します.