webpack 4の基礎構成
6687 ワード
グローバルインストール
これはJavaScript以外の任意の静的リソースを包装することを許可します.Loadersは単独でインストールし、webpack.co nfig.jsの下のmodulesキーワードで構成する必要があります.Loadersの構成オプションは以下のいくつかの態様を含みます.test:Loadersの処理したファイルに合致する拓展名の正規表現(必須)loader:loaderの名前(必須)include/exclude:処理しなければならないファイル/フォルダを手動で追加したり、処理不要のファイル/フォルダをブロックしたり(オプション)options:Loadersに追加の設定オプションを提供します(オプション)
あなたのブラウザに修正したコードを監視してもらいたくないです.自動的に修正した結果を更新します.実はWebpackはオプションのローカル開発サーバを提供しています.このローカルサーバはnode.jsに基づいて構築されています.これらの機能を実現できます.ただし、単独のコンポーネントです.Webpackで設定する前に、プロジェクト依存として単独でインストールします.端末に下記のコマンドを入力して対応部品をインストールします.同時にグローバルにインストールして、プロジェクトディレクトリにインストールすることをお勧めします.
まずグローバルインストール
package.jsonファイルのscriptsオプションを編集します.
参照
cnpm install webpack -g
packet.jsonファイルを初期化します.cnpm init
プロジェクトにインストールcnpm install webpack
//cnpm install webpack-cli
ローカルプロジェクトディレクトリ作成プロファイルwebpack.config.js
html-webpack-pluginモジュールと必要ないくつかのloaderをインストールします.これはJavaScript以外の任意の静的リソースを包装することを許可します.Loadersは単独でインストールし、webpack.co nfig.jsの下のmodulesキーワードで構成する必要があります.Loadersの構成オプションは以下のいくつかの態様を含みます.test:Loadersの処理したファイルに合致する拓展名の正規表現(必須)loader:loaderの名前(必須)include/exclude:処理しなければならないファイル/フォルダを手動で追加したり、処理不要のファイル/フォルダをブロックしたり(オプション)options:Loadersに追加の設定オプションを提供します(オプション)
// html-webpack-plugin
cnpm install html-webpack-plugin
// css-loader style-loader
cnpm install --save-dev css-loader style-loader
// es6
//cnpm install --save-dev babel-core babel-loader babel-preset-es2015
//babel-preset-es2015 , babel-preset-env;
cnpm install babel-loader babel-core babel-preset-env
サーバの熱応答を設定あなたのブラウザに修正したコードを監視してもらいたくないです.自動的に修正した結果を更新します.実はWebpackはオプションのローカル開発サーバを提供しています.このローカルサーバはnode.jsに基づいて構築されています.これらの機能を実現できます.ただし、単独のコンポーネントです.Webpackで設定する前に、プロジェクト依存として単独でインストールします.端末に下記のコマンドを入力して対応部品をインストールします.同時にグローバルにインストールして、プロジェクトディレクトリにインストールすることをお勧めします.
まずグローバルインストール
cnpm install -g webpack-dev-server
あなたのプロジェクトディレクトリにインストールします.cnpm install --save-dev webpack-dev-server
//
devserver Webpack ,
contentBase webpack-dev-server ,
,
( “public" ).
port , , "8080".
inline true, .
historyApiFallback ,
HTML5 history API, true, index.html.
webpack.config.js .
devServer: {
contentBase: "./public",
port: "9000",
inline: true,
historyApiFallback: true,
}
ショートカットの追加package.jsonファイルのscriptsオプションを編集します.
"scripts": {
"start": "webpack-dev-server --hot --inline"
},
webpack.co nfig.jsに関連内容を配置する. //
var path = require("path");// path
var webpack = require("webpack"); // webpack
var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, 'app');
var Pro_PATH = path.resolve(ROOT_PATH, 'project');
// html
var htmlwebpackplugin = require("html-webpack-plugin");
module.exports={
mode: 'production',// , development
entry:app_path, //
output:{ //
path:build_path, //
filename:"build.js" //
},
//
devServer: {
contentBase: "./public",
port: "9000",
inline: true,
historyApiFallback: true,
},
// loader, webpack4,loaders rules
module:{
rules:[ //css style loader
{
test:/\.css$/,
loaders:["style-loader","css-loader"],
include: APP_PATH
},
{ //js loader( es6)
test:/\.js$/,
loader:["babel-loader"],
include: APP_PATH,
query: {
presets: ['preset-env']
}
}
]
},
//
plugins:[
new htmlwebpackplugin({
title:" ",
template:"./app/template.html" //
}),
new webpack.ProvidePlugin({ // ,
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery"
})
]
}
マルチファイルの入り口を設定したいなら参照
var path = require('path');
var webpack = require("webpack");
var HtmlwebpackPlugin = require('html-webpack-plugin');
//
var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, 'app');
var Pro_PATH = path.resolve(ROOT_PATH, 'project');
var COMMON = path.resolve(ROOT_PATH, 'public');
var BUILD_PATH = path.resolve(ROOT_PATH, 'build');
module.exports = {
mode: 'production',
// index.js
entry: {
index:APP_PATH+"/index.js",
Pro1:Pro_PATH+"/Pro1.js",
com:COMMON+"/common.js"
},
// js bundle.js
output: {
path: BUILD_PATH,
filename: '[name].[hash].js'// hash js
},
//
devServer: {
historyApiFallback: true,
hot: true,
inline: true,
contentBase: "./app"
},
module: {// loader
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
},
{
test: /\.(png|jpg)$/,
loader: 'url?limit=40000'
},
{// es6
test: /\.js?$/,
loader: 'babel-loader',
include: APP_PATH,
options: {
presets: ['preset-env']
}
},
]
},
// html
plugins: [
new HtmlwebpackPlugin({
title: ' ',
template: path.resolve(APP_PATH, 'index.html'),
filename: 'index.html',
//chunks entry
chunks: ["index","com"],
// script
inject: 'body'
}),
new HtmlwebpackPlugin({
title: ' ',
template: path.resolve(Pro_PATH, 'Pro1.html'),
filename: 'Pro1.html',
chunks: ["Pro1","com"],
inject: 'body'
}),
// jquery
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery"
})
]
};
実例(単純圧縮js)// html-webpack-plugin
var htmlwebpackplugin = require("html-webpack-plugin");
var path = require("path");
module.exports = {
entry:{
index:__dirname+"/dist/index.js",
information:__dirname+"/dist/infomation.js",
detail:__dirname+"/dist/detail.js"
},
output:{
path:__dirname+"/build",
filename:"[name].js"
},
module:{
loaders:[
{
test:/\.js$/,
loaders:["babel-loader"],
exclude: path.resolve(__dirname,'/app/')
}
]
}
}