Я пытаюсь использовать webpack-dev-server для компиляции файлов и запуска веб-сервера dev.
В моем package.json
случае свойство script установлено на:
"scripts": {
"dev": "webpack-dev-server --hot --inline",
}
Таким образом, --hot
и --inline
следует включить веб-сервер и горячую перезагрузку (насколько я понимаю).
В своем webpack.config.js
файле я установил параметры ввода, вывода и devServer, а также добавил загрузчик для поиска изменений в .vue
файлах:
module.exports = {
entry: './src/index.js',
output: {
path: __dirname + '/public',
publicPath: '/public',
filename: 'bundle.js'
},
devtool: 'source-map',
devServer:{
contentBase: __dirname + '/public'
},
module:{
loaders:[
{ test: /\.vue$/, loader: 'vue'}
]
}
};
Итак, с этой настройкой я бегу npm run dev
. Запускается webpack-dev-server, работает тест загрузчика модуля (т.е. когда я сохраняю любой файл .vue, он вызывает перекомпиляцию webpack), но:
- Браузер никогда не обновляется
- Скомпилированный javascript, который сохраняется в памяти, никогда не становится доступным для браузера.
На этом втором маркере я вижу это, потому что в окне браузера заполнители vue никогда не заменяются, и если я открываю консоль javascript, экземпляр Vue никогда не создается и не становится доступным глобально.
Что мне не хватает?
источник
Ответы:
Здесь у меня возникли две проблемы:
module.exports = { entry: './src/index.js', output: { // For some reason, the `__dirname` was not evaluating and `/public` was // trying to write files to a `public` folder at the root of my HD. path: __dirname + '/public', // Public path refers to the location from the _browser's_ perspective, so // `/public' would be referring to `mydomain.com/public/` instead of just // `mydomain.com`. publicPath: '/public', filename: 'bundle.js' }, devtool: 'source-map', devServer:{ // `contentBase` specifies what folder to server relative to the // current directory. This technically isn't false since it's an absolute // path, but the use of `__dirname` isn't necessary. contentBase: __dirname + '/public' }, module:{ loaders:[ { test: /\.vue$/, loader: 'vue'} ] } };
Вот исправленное
webpack.config.js
:var path = require('path'); module.exports = { entry: [ './src/PlaceMapper/index.js' ], output:{ filename: 'bundle.js', path: path.resolve(__dirname, 'public/') }, devtool: 'source-map', devServer:{ contentBase: 'public' }, module:{ loaders:[ { test: /\.vue$/, loader: 'vue'} ] } };
источник
После долгих поисков я нашел решение своей проблемы, в моем случае путь вывода был настроен неправильно.
Эта конфигурация решила мою проблему:
const path = require('path'); module.exports = { "entry": ['./app/index.js'], "output": { path: path.join(__dirname, 'build'), publicPath: "/build/", "filename": "bundle.js" }....
источник
правильное решение
Скажите,
dev-server
чтобы посмотреть файлы, обслуживаемые параметром devServer.watchContentBase .Если этот параметр включен, изменение файла вызывает полную перезагрузку страницы .
Пример:
module.exports = { //... devServer: { // ... watchContentBase: true } };
источник
У меня была такая же проблема, и я обнаружил, что в дополнение ко всем этим пунктам мы также должны поместить index.html вместе с выходным файлом bundle.js в ту же папку и установить contentBase в эту папку, либо в корень, либо во вложенную папку. .
источник
Каким-то образом в моем случае удаление "--hot" заставляет его работать. Итак, я удалил
hot: true
webpack.dev.js
module.exports = merge(common, { mode: 'development', devtool: 'inline-source-map', devServer: { publicPath: '/js/', contentBase: path.resolve(__dirname, 'docs'), watchContentBase: true, } });
webpack.common.js
output: { path: path.resolve(__dirname, 'docs/js'), filename: '[name].min.js', library: ['[name]'] },
источник
Это может произойти из-за ExtractTextPlugin . Отключите ExtractTextPlugin в режиме разработки. Используйте его только для производственной сборки.
источник
Это случилось и со мной после запуска двух разных приложений на одном
webpack-dev-server
порте друг за другом. Это произошло, несмотря на то, что другой проект был закрыт. Когда я перешел на неиспользуемый порт, он сразу заработал.devServer: { proxy: { '*': { target: 'http://localhost:1234' } }, port: 8080, host: '0.0.0.0', hot: true, historyApiFallback: true, },
Если вы используете Chrome, как я, просто откройте
Developer Tools
и нажмитеClear site data
. Вы также можете узнать, не в этом ли проблема, запустив сайт в режиме инкогнито.источник
В моем случае я так глубоко погрузился в эксперименты с функциями Webpack, но совершенно забыл, что я установил inject как ложное все время, вот так ...
new HTMLWebpackPlugin({ inject: false, ... }),
Включение этого было моим билетом.
источник
У меня была аналогичная ситуация, когда
webpack-dev-server
мойindex.html
файл обслуживался, но не обновлялся. Прочитав несколько сообщений, я понял, чтоwebpack-dev-server
не создает новый файл js, а вместо этого вставляет его вindex.html
.Я добавил в
html-webpack-plugin
свое приложение со следующей конфигурацией в своемwebpack.config.js
файле:const HtmlWebpackPlugin = require('html-webpack-plugin') plugins: [ new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true }) ]
Затем я закомментировал тег скрипта, ссылающийся на мой входной js-файл в
index.html
. Теперь я могу работатьwebpack-dev-server
без каких-либо дополнительных флагов, и любые изменения в моих файлах мгновенно отображаются в браузере.источник
Я добавлю здесь свой особый рассказ о
--watch
горе Webpack к стене страданий.я бегал
для создания проекта Typescript. Скомпилированные
.js
файлы обновятся, но пакет, который просматривал браузер, не обновится. Так что я был в основном в том же положении, что и ОП.Моя проблема сводилась к
watchOptions.ignored
параметру. Первоначальный автор конфигурации сборки настроилignored
функцию фильтра, которая, как оказалось, не является допустимым значением для этого параметра. Замена функции фильтра на соответствующуюRegExp
заставила--watch
сборку снова работать для меня.источник
Дерево вашего проекта нечеткое, однако проблема может быть в настройке contentBase. Попробуйте установить contentBase: __dirname
источник