私は約1週間そこにいて、3人を一緒に働かせることができませんでした。誰かがこれを手伝ってくれるなら、私は永遠に感謝します、私はとても多くの時間を無駄にしました。
問題:
myserver.devをプロキシして404をホットリロードした場合。 publicPathを変更しても何も起こりません。 URLをwebpack-hot-middleware/clientに添付すると、パスが修正されますが、hmrファイルのコンソールで情報のない「GET」エラーが発生します。ホットリロードは、HTMLのままにして、php/MAMPを無視すれば、正常に機能します。私は全体的に本当に混乱していて、おそらく単純な概念が欠けています。
私が一緒に仕事をしようとしていること:
-Wordpress for its REST API
-React for views and ui
-ローカルホストおよびMySQL用のMAMP
-デバイス間でテストするためのBrowserSync
-コンパイルおよびホットリロード用のWebpack
これは私が使用した定型文です:https://github.com/Browsersync/recipes/tree/master/recipes/webpack.react -ホットローダー
テーマディレクトリ構造:
-/ inc
-/ src
-/コンポーネント
-/コンテナ
-/ styles
-app.js
-bundle.js
-functions.php
-index.php
-package.json
-server.js
-style.css
-webpack.config.js
私は100万の構成を試したので、簡単にするために以下のコードを削除しました。
webpack.config.js:
var webpack = require('webpack');
var path = require('path');
module.exports = {
context: path.join(__dirname, 'src'),
entry: [
'webpack/hot/dev-server',
'webpack-hot-middleware/client',
'./app'
],
output: {
path: __dirname,
publicPath: __dirname,
filename: 'bundle.js'
},
plugins: [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
{ test: /\.jsx?$/, exclude: /node_modules/, loaders: ['react-hot', 'babel'] }
]
}
};
server.js:
/**
* Require Browsersync along with webpack and middleware for it
*/
var browserSync = require('browser-sync');
var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
/**
* Require ./webpack.config.js and make a bundler from it
*/
var webpackConfig = require('./webpack.config');
var bundler = webpack(webpackConfig);
/**
* Run Browsersync and use middleware for Hot Module Replacement
*/
browserSync({
proxy: {
target: 'http://myserver.dev',
middleware: [
webpackDevMiddleware(bundler, {
// IMPORTANT: dev middleware can't access config, so we should
// provide publicPath by ourselves
publicPath: webpackConfig.output.publicPath,
// pretty colored output
stats: { colors: true }
// for other settings see
// http://webpack.github.io/docs/webpack-dev-middleware.html
}),
// bundler should be the same as above
webpackHotMiddleware(bundler)
]
},
// prevent opening a new window.
open: false,
// no need to watch '*.js' here, webpack will take care of it for us,
// including full page reloads if HMR won't work
files: [
]
});
package.json:
{
"main": "server.js",
"scripts": {
"build": "webpack",
"start": "node ."
},
"dependencies": {
"babel-core": "^5.8.9",
"babel-loader": "^5.3.2",
"browser-sync": "^2.8.0",
"react": "^0.13.3",
"react-hot-loader": "^1.2.8",
"webpack": "^1.10.5",
"webpack-dev-middleware": "^1.2.0",
"webpack-hot-middleware": "^1.1.0"
}
}
私はあなたのためにリンクでこれに答えたかった: https://css-tricks.com/combine-webpack-gulp-4/
この記事では、問題を解決するために必要なすべてを説明します。私にとっては素晴らしい作品です。 gulpを使用しますが、構成からそれを取り除き、少しハックすることができます。ただし、セットアップの基本はすべてそこにあります。
Wordpress 2018年半ばまでに)の新しいバージョンのWebpackとBrowserSyncで状況が変わった可能性がありますが、=の非常にシンプルで最新のWebpackとBrowserSyncのレシピがありますWordpress JS、CSS、およびPHPのライブリロードがあります。これはReactを使用しますが、そうではありませんReactセットアップ、ES6モジュールのインポート/エクスポートのみ。
フォルダー構造:
theme
⊢⊸ api
⊢⊸ models
⊢⊸ controllers
⊢⊸ index.php
⊢⊸ frontend
⊢⊸ src
⊢⊸ App.js
⊢⊸ App.css
⊢⊸ index.js
⊢⊸ .babelrc
⊢⊸ package.json
⊢⊸ postcss.config.js
⊢⊸ webpack.config.js
⊢⊸ yarn.lock
⊢⊸ main.js
⊢⊸ functions.php
⊢⊸ index.php
⊢⊸ style.css
Package.json:
"scripts": {
"start": "webpack --mode development --watch",
"build": "webpack --mode production"
},
"devDependencies": {
"autoprefixer": "^8.5.0",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"browser-sync": "^2.24.4",
"browser-sync-webpack-plugin": "^2.2.2",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"postcss-loader": "^2.1.5",
"react": "^16.4.0",
"react-dom": "^16.4.0",
"style-loader": "^0.21.0",
"webpack": "^4.8.3",
"webpack-cli": "^2.1.3",
"webpack-dev-server": "^3.1.4"
}
Webpack.config.json
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
module.exports = {
entry: { main: './src/index.js' },
output: {
path: path.resolve(__dirname, './../'),
filename: 'main.js'
},
devtool: 'inline-source-map',
devServer: {
openPage: '',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.css$/,
use: ExtractTextPlugin.extract(
{
fallback: 'style-loader',
use: ['css-loader', 'postcss-loader']
}
)
}
]
},
plugins: [
new ExtractTextPlugin({filename: 'style.css'}),
new BrowserSyncPlugin({
files: [
'./../',
'./../api/**/*.php',
'./../api/*.php',
'./',
'!./node_modules',
'!./yarn-error.log',
'!./package.json',
'!./style.css.map',
'!./app.js.map'
],
reloadDelay: 0
})
]
};
Postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
]
}
.babelrc
{
"presets": ["env", "react"]
}
その他の推奨事項には、すべてのJSプロジェクトでのコードフォーマットの事前コミット(Lint-StagedおよびHuskyを使用)で Prettier 、適切な.gitignore
ここで該当する場合の使用法、および ACF Builder for WP devs。
まあ、正確には巧妙な答えではありませんが、私の Gutenberg Boilerplate には非常に基本的なWebpackセットアップがあり、WordPressでESNext、React、Webpackを使い始めるのに役立ちます。