Недавно на работе я разрабатываю приложение JavaScript, которое говорит на API на основе JBOSS (Java). Это приложение развернуто и обслуживается jboss и ранее, как у меня делали развитие, имели WebPack Смотреть скрипт с NPM , а потом rsync Встроенные файлы в каталог сервер Java обслуживает их. Это в основном из-за CORS и JBOSS SSO работает только для определенных доменов (и по расширению, портам).
Недавно я понял, что на самом деле могу значительно улучшить свой рабочий процесс с HMR (Reloading Hot Module) и что он полностью возможно, без использования узла для обслуживания вашего index.html (или что-нибудь).
Хорошо, как мы это делаем?
Первый до тебе понадобится разные index.html Файлы для проведения вашего кода JS для разработки и производства. Это верно для любой установки HMR.
Давайте посмотрим на Соответствующий раздел документов WebPack Отказ
Что это в основном говорит нам, это то, что обычно WebPack-Dev-Server Служит как иноведение index.html Файл со ссылкой на URL-адрес, который обслуживает горячий загруженный код и фактический код, когда мы его меняем. По умолчанию по умолчанию обслуживается на портах 8080 и 9090. Что мы хотим сделать, это половина этого. Мы все еще хотим служить горячим загруженным коде, но не index.html Как мы будем обслуживать себя с нашим собственным веб-сервером (в моем случае jboss).
Это руководство предполагает, что у вас есть базовый WebPack 1.x Настройка уже идет. Если вы этого не сделаете, вы можете обратиться к Это руководство Отказ
Установка зависимостей
Нам нужно установить (если у вас их еще нет) html-webpack-plugin , WebPack-Dev-Mardware , WebPack-Dev-Server и WebPack-Hot-Mardware , URL-погрузчик , Стиль-погрузчик , файловой погрузчик Отказ
Вы можете просто запустить NPM Установка --save-dev Webpack-Hot-Mardware Webpack-Dev-Server WebPack-Dev-Mardware HTML-Webpack-Plugin-Look-Loader File-Loader URL-погрузчик
WebPack Config.
Далее мы обновим наше webpack.conf.js Чтобы запустить DEV Server и сделать HMR!
Ниже приведен простой пример webpack.conf.js , вы можете скопировать и вставлять биты, которые выглядят отличаться в вашем собственном.
Эта конфигурация делает несколько предположений:
- Ваши встроенные файлы будут выводиться в
распад/ - Ваши исходные файлы живут в
SRC/ - Ваше приложение EntryPoint –
SRC/Main. {JS, JSX}(может иметь либо расширение JS или JSX) - Существует файл в той же папке, что и этот файл конфигурации под названием
index.ejs(Мы доберемся до этого всего за секунду)
var webpack = require('webpack');
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var BUILD_DIR = path.resolve(__dirname, 'dist');
var APP_DIR = path.resolve(__dirname, 'src');
var config = {
devtool: 'eval',
entry: [
"webpack-dev-server/client?http://localhost:9090",
"webpack/hot/only-dev-server",
'babel-polyfill',
APP_DIR + '/main'
],
output: {
path: BUILD_DIR,
filename: 'bundle.js',
publicPath: "http://localhost:9090/"
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new HtmlWebpackPlugin({
template: 'index.ejs'
})
],
devServer: { inline: true },
module : {
loaders : [
{
test : /\.jsx?$/,
include : APP_DIR,
loaders : ['react-hot', 'babel']
},
{
test: /\.css$/,
loader: 'style!css?sourceMap'
}, {
test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
loader: "url?limit=10000&mimetype=application/font-woff"
}, {
test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
loader: "url?limit=10000&mimetype=application/font-woff"
}, {
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
loader: "url?limit=10000&mimetype=application/octet-stream"
}, {
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
loader: "file"
}, {
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
loader: "url?limit=10000&mimetype=image/svg+xml"
}
]
},
resolve: {
extensions: ['', '.js', '.jsx', '.css']
}
};
module.exports = config;
index.ejs.
Это в основном шаблон WebPack использует для введения разметки, необходимой для горячей нагрузки. Он в основном просто HTML-файл (он может выводить некоторые переменные ), которые служат ваш пакет.
My Application
Сервер HMR
Далее нам нужно установить Express ( NPM Установить --save-dev Express ) и создать файл под названием server.js.
Что это на самом деле служит подключенным файлом для WebPack-Dev-Server Чтобы отправить на страницу каждый раз, когда мы делаем изменение. У меня также есть мой служить still.css файл.
var express = require('express');
var app = express();
// Serve application file
app.get('/bundle.js', function(req, res) {
res.sendFile(__dirname + '/dist/bundle.js');
});
// Serve aggregate stylesheet
app.get('/style.css', function(req, res) {
res.sendFile(__dirname + '/build/style.css');
});
app.use(express.static('dev-public'));
// Serve index page
app.get('*', function(req, res) {
res.sendFile(__dirname + '/dist/index.html');
});
if (!process.env.PRODUCTION) {
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
noInfo: true,
historyApiFallback: true
}).listen(9090, 'localhost', function (err, result) {
if (err) {
console.log(err);
}
});
}
Сценарий NPM и начинающий вещи
Давайте сделаем новую запись в Сценарии Раздел нашего Package.json Это выглядит так:
"server": "webpack --progress -p && node server.js"
Затем запустите NPM запустить сервер Отказ
Наконец, нам нужно скопировать index.html Файл из нашего Dist/ каталог туда везде, где веб-сервер (в моем случае jboss) ищет его. Это может быть в .war/ Папка/файл где-то на вашей файловой системе. Этот метод работает в значительной степени любого вида веб-сервера!