Webpack --watch не работает в Windows (и webpack-dev-server)

Кажется, это обычная проблема, но после нескольких дней активных поисков я не нашел решения, которое работает в моем случае.

  • windows7-x64
  • node: 6.3.0-x64 (также попробовал node -v4.4.7-x64)
  • npm: 3.10.3
  • webpack: 1.13.1
  • возвышенный текст (не Vim)

Прежде всего, я не могу установить fsevents на окна, что может быть проблемой, потому что это библиотека для просмотра в OS X.

D:\file>npm install webpack
[email protected] D:\file
`-- [email protected]

npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: [email protected]

Итак, если ваш --watch работает в Windows, скажите, пожалуйста, у вас есть такая же проблема с пропуском fsevents при установке webpack?


Во-вторых, webpack --watch компилирует файл, но он вообще не смотрит.

например. если я использую часы стилуса, тогда он фактически блокирует мою командную строку, пока я не нажму ctrl + c

D:\file>stylus -w style.styl  
watching C:/Users/...  
compiled style.css  
watching style.styl
_

И только после ctrl + c он разблокирует мою клавиатуру.

^CTerminate batch job (Y/N)? y

stylus-watch

Пока webpack -w полностью отличается. Это не просто не компиляция файла об изменениях, но и не просмотр вообще. Я имею в виду, что после ввода команды webpack --watch она компилирует файл один раз, но не блокирует мою клавиатуру и поэтому позволяет мне написать еще одну команду.

D:\webpa>webpack main.js bundle.js
D:\webpa>webpack -w main.js bundle.js
D:\webpa>webpack --watch main.js bundle.js
D:\webpa>

webpack-watch

То же самое с webpack-dev-server - он запускает сервер, но затем сразу же завершает его.

D:\webpa>webpack-dev-server --hot --inline
http://localhost:8080/
webpack result is served from /
content is served from D:\webpa
D:\webpa>

Похоже, проблема не в webpack.config.js, потому что она не смотрит даже с помощью команды типа webpack --watch main.js bundle.js, но в любом случае вот моя базовая конфигурация.

var webpack = require('webpack');
module.exports = {
  context: __dirname,
  entry: "./main.js",
  output: {
    path: __dirname,
    filename: "bundle.js"
  },
};

И я пробовал много других вариантов:

var webpack = require('webpack');
var path = require('path');
var entry = path.join(__dirname, "main.js");
var WebpackNotifierPlugin = require('webpack-notifier');

module.exports = {
  context: __dirname,
  entry: entry,
  output: {
    path: __dirname,
    filename: "bundle.js"
  },
  resolve: {root: [__dirname]},
  resolve: { fallback: path.join(__dirname, "node_modules") },
  resolveLoader: { fallback: path.join(__dirname, "node_modules") },
  plugins: [
    new webpack.OldWatchingPlugin(),
    new WebpackNotifierPlugin(),
    new webpack.ResolverPlugin(
        new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin("bower.json", ["main"])
    ),
    new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors/js/applibs.js'),
    new webpack.optimize.DedupePlugin()
  ]
};

Как я уже сказал, проблема, похоже, не в webpack.config.js


Я также пробовал такие вещи, как:

echo fs.inotify.max_user_watches=524288
webpack-dev-server --content-base ./ --port 9966 --hot --inline
webpack --watch --watch-poll
rename/move/create new folder, reinstall node.js and webpack

Итак, если у вас была эта проблема, и вы разрешили, пожалуйста, поделитесь информацией.

  • У вас возникли проблемы с установкой fsevents?
  • Была ли ваша команда webpack --watch блокировать вашу клавиатуру и фактически смотреть, но просто не компилировать файлы после изменений? Или он заканчивал смотреть сразу, как в моем случае?
  • Любые другие предложения о том, что использовать помимо --watch и webpack-dev-server?

Спасибо!

Ответ 1

Я включу это здесь, потому что он исправил мою проблему. Он может или не может исправить ваши, в зависимости от того, являются ли ваши пути в вашем сообщении фактически путями, которые вы используете. Если это не решит вашу проблему, по крайней мере, это решит некоторые проблемы, потому что этот вопрос возникает в первую очередь для этой проблемы.

У вас не может быть путь с "(" или ")" в нем, потому что зависимость is-glob считает его glob, если вы это сделаете. Если вы должны поместить свой проект в путь с помощью "(" (например, Program Files (x86)), то вы должны добавить что-то вроде этого в свой модуль-glob в node_modules:

  if (typeof str === 'string' && str.indexOf('Program Files (x86)') > -1)
     return false

Ответ 2

Посмотрите на использование fswatch. Я оказываюсь в том же беспорядке. Windows/Linux не может поддерживать fsevents, учитывая его строго для OSX. Поддержка Linux, например, осуществляется через inotify.

Кажется, что fswatch предоставляет межплатформенный монитор файловой системы, поэтому вы должны быть настроены, если вы используете его с вашей машиной Windows.