webpack 4シリーズ教程(16):開発モードと生産モード・実戦
8293 ワード
これはです原文の住所:https://godbmw.com/passage/75 私の小さい駅:godbmw.com 0.授業紹介と資料>>本節課のソースコード >>すべての課程のソースコード 今回の授業のコードリストは以下の通りです.
1.開発環境と生産環境をどう分離するか?
VuejsまたはReactJsの足場をよく知っている友達はすべて知っているはずです.ルートディレクトリの下に
前の15時間の授業のデモと違って、開発環境と生産環境を分離するために、それぞれ対応する
間違いなく、いくつかのプラグインと配置は2つの環境を共有しているので、重複した労働を避けるために、精製すべきです.上記のディレクトリのスクリーンショットのように、
2.作成
3.webpackの異なる構成をどのように統合しますか?
前に述べたように、私たちは3つのプロファイルを持っています.では、
このときは、
4.1プロファイル
このjsファイルがwebpackコマンドの入口ファイルである場合、
下のコードのように、まず環境を判断して、どのような配置を使うかを決めて、最後にreturnはwebpackに与えます.
このjsファイルがプロジェクトのスクリプトファイルである場合、
5.1パブリックプロファイルの作成
プロジェクトディレクトリのスクリーンショットに展示されている様式のファイルは、ベンダdorの下のファイルとap.jsがあります.コードは一つ一つ並べられていません.必要に応じて、簡単なコードを書いて、実行してもいいです.前の配置ファイルの構造と説明が一番重要です.
ここはソースの住所だけを提供します.エントランスファイル 7.運転効果とテスト
こんなに長い間いじっていたら、必ずテストしなければなりません.どうすれば正確さが分かりますか?
7.1走る:開発モード
プロジェクトディレクトリに入り、
成功して走りました.間違いはありませんでした.
ブラウザのコントロールを開けてみます.
はい、全部作成された
7.2走る:生産モード
包装したファイルも指定の場所に置いてあります.
直接
ok、
8.最終的に
完结撒花✿ヽ(°)ノ✿
webpack4
シリーズの最後の教程です.この文章は前のすべての教程をもとにして、本当の意味でwebpackプロジェクトを作りました.私は三ヶ月をかけてこの教程を整理しました.関連の実例コードを完備しました.webpackの理論と応用ももっと熟知しています.もちろん、皆さんの支持にも感謝しています.はい、感慨が終わりました.本題を始めます.1.開発環境と生産環境をどう分離するか?
VuejsまたはReactJsの足場をよく知っている友達はすべて知っているはずです.ルートディレクトリの下に
/build/
フォルダがあります.専用にwebpack
配置ファイルの関連コードを置いています.前の15時間の授業のデモと違って、開発環境と生産環境を分離するために、それぞれ対応する
webpack.config.js
配置コードを作成する必要があります.間違いなく、いくつかのプラグインと配置は2つの環境を共有しているので、重複した労働を避けるために、精製すべきです.上記のディレクトリのスクリーンショットのように、
webpack
は、両方の環境に共通のプロファイルを保存しています.build/webpack.common.conf.js
およびbuild/webpack.dev.conf.js
は、それぞれ開発と生産環境に必要な特殊な構成である.2.作成
build/webpack.prod.conf.js
前のセクションと同様に、コマンドをより良く起動するためには、構成package.json
オプションが必要である.scripts
のコマンドフォーマットを模倣して、以下のように作成されている.{
"scripts": {
"dev": "webpack-dev-server --env development --open --config build/webpack.common.conf.js",
"build": "webpack --env production --config build/webpack.common.conf.js"
},
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.7.0",
"clean-webpack-plugin": "^0.1.19",
"css-loader": "^1.0.0",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"html-webpack-plugin": "^3.2.0",
"jquery": "^3.3.1",
"style-loader": "^0.21.0",
"webpack": "^4.16.1",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "^3.1.4",
"webpack-merge": "^4.1.3"
},
"dependencies": {
"babel-polyfill": "^6.26.0",
"babel-runtime": "^6.26.0"
}
}
設定に従って、実行:vue-cli
:開発デバッグモードに入るpackage.json
:パッケージファイルを生成するnpm run dev
は、2つの環境の共通コードを格納しているだけでなく、npm run build
コマンドの入口ファイルであることも分かる.3.webpackの異なる構成をどのように統合しますか?
前に述べたように、私たちは3つのプロファイルを持っています.では、
build/webpack.common.conf.js
に開発または生産環境の構成を導入し、正確に統合するにはどうすればいいですか?このときは、
webpack
という第三者ライブラリを借りる必要があります.以下は例示的なコードです.const merge = require("webpack-merge");
const productionConfig = require("./webpack.prod.conf");
const developmentConfig = require("./webpack.dev.conf");
const commonConfig = {}; // ...
module.exports = env => {
let config = env === "production" ? productionConfig : developmentConfig;
return merge(commonConfig, config); //
};
4.コードの中で環境を区分するにはどうすればいいですか?4.1プロファイル
このjsファイルがwebpackコマンドの入口ファイルである場合、
build/webpack.common.conf.js
の値はwebpack-merge
の最初のパラメータに自動的に入力され、開発者が直接使用することができる.下のコードのように、まず環境を判断して、どのような配置を使うかを決めて、最後にreturnはwebpackに与えます.
module.exports = env => {
let config = env === "production" ? productionConfig : developmentConfig;
return merge(commonConfig, config); //
};
4.2プロジェクトファイルこのjsファイルがプロジェクトのスクリプトファイルである場合、
build/webpack.common.conf.js
にアクセスして環境を判断することができます.if (process.env.NODE_ENV === "development") {
console.log(" ");
} else {
console.log(" ");
}
5.プロファイルの作成5.1パブリックプロファイルの作成
// /build/webpack.common.conf.js
const webpack = require("webpack");
const merge = require("webpack-merge");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
const productionConfig = require("./webpack.prod.conf.js"); //
const developmentConfig = require("./webpack.dev.conf.js"); //
/**
* ,
* @param {String} env "development" or "production"
*/
const generateConfig = env => {
// Loader Plugin
let scriptLoader = [
{
loader: "babel-loader"
}
];
let cssLoader = [
{
loader: "css-loader",
options: {
minimize: true,
sourceMap: env === "development" ? true : false // : source-map
}
}
];
let styleLoader =
env === "production"
? ExtractTextPlugin.extract({
// : 、
fallback: {
loader: "style-loader"
},
use: cssLoader
})
: // :
cssLoader;
return {
entry: { app: "./src/app.js" },
output: {
publicPath: env === "development" ? "/" : __dirname + "/../dist/",
path: path.resolve(__dirname, "..", "dist"),
filename: "[name]-[hash:5].bundle.js",
chunkFilename: "[name]-[hash:5].chunk.js"
},
module: {
rules: [
{ test: /\.js$/, exclude: /(node_modules)/, use: scriptLoader },
{ test: /\.css$/, use: styleLoader }
]
},
plugins: [
//
new HtmlWebpackPlugin({
filename: "index.html",
template: path.resolve(__dirname, "..", "index.html"),
chunks: ["app"],
minify: {
collapseWhitespace: true
}
}),
new webpack.ProvidePlugin({ $: "jquery" })
]
};
};
module.exports = env => {
let config = env === "production" ? productionConfig : developmentConfig;
return merge(generateConfig(env), config);
};
5.2開発環境プロファイルの作成// /build/webpack.dev.conf.js
const webpack = require("webpack");
const path = require("path");
module.exports = {
mode: "development",
devtool: "source-map",
devServer: {
contentBase: path.join(__dirname, "../dist/"),
port: 8000,
hot: true,
overlay: true,
proxy: {
"/comments": {
target: "https://m.weibo.cn",
changeOrigin: true,
logLevel: "debug",
headers: {
Cookie: ""
}
}
},
historyApiFallback: true
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin()
]
};
5.3生産環境配置ファイルを作成する// /build/webpack.comm.conf.js
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const path = require("path");
module.exports = {
mode: "production",
plugins: [
new ExtractTextPlugin({
filename: "[name].min.css",
allChunks: false // css, CSS
}),
new CleanWebpackPlugin(["dist"], {
root: path.resolve(__dirname, "../"),
verbose: true
})
]
};
6.その他のファイルプロジェクトディレクトリのスクリーンショットに展示されている様式のファイルは、ベンダdorの下のファイルとap.jsがあります.コードは一つ一つ並べられていません.必要に応じて、簡単なコードを書いて、実行してもいいです.前の配置ファイルの構造と説明が一番重要です.
ここはソースの住所だけを提供します.
mode
:https://github.com/dongyuanxin/webpack-demos/blob/master/demo16/src/app.js module.exports
におけるすべてのスタイルファイル:https://github.com/dongyuanxin/webpack-demos/tree/master/demo16/src/style process.env.NODE_ENV
におけるすべてのスクリプトファイル:https://github.com/dongyuanxin/webpack-demos/tree/master/demo16/src/vendor こんなに長い間いじっていたら、必ずテストしなければなりません.どうすれば正確さが分かりますか?
7.1走る:開発モード
プロジェクトディレクトリに入り、
/src/app.js
を実行します.成功して走りました.間違いはありませんでした.
ブラウザのコントロールを開けてみます.
はい、全部作成された
/src/style/
の論理で出力されます.7.2走る:生産モード
/src/vendor/
で開発モードを終了したら、npm run dev
を実行し、下図のように梱包に成功しました.包装したファイルも指定の場所に置いてあります.
直接
app.js
をクリックして、ブラウザコンソールを開きます.ok、
Ctrl+C
の出力に適合しています.開発環境かどうか確認できました.8.最終的に
完结撒花✿ヽ(°)ノ✿