Просмотр исходного кода

give up HMR and impl watch&autorefresh scripts

Yuki Takei 9 лет назад
Родитель
Сommit
5f10ff8439
6 измененных файлов с 53 добавлено и 33 удалено
  1. 5 0
      config/helpers.js
  2. 4 3
      config/webpack.dev.js
  3. 16 21
      lib/crowi/dev.js
  4. 20 0
      lib/crowi/helpers.js
  5. 8 7
      package.json
  6. 0 2
      resource/js/dev.js

+ 5 - 0
config/helpers.js

@@ -1,3 +1,8 @@
+/**
+ * @author: @AngularClass
+ * @author: Yuki Takei <yuki@weseek.co.jp>
+ */
+
 var path = require('path');
 
 const EVENT = process.env.npm_lifecycle_event || '';

+ 4 - 3
config/webpack.dev.js

@@ -19,7 +19,7 @@ const DllBundlesPlugin = require('webpack-dll-bundles-plugin').DllBundlesPlugin;
 const ENV = process.env.ENV = process.env.NODE_ENV = 'development';
 const HOST = process.env.HOST || '0.0.0.0';
 const PORT = process.env.PORT || 3000;
-const HMR = helpers.hasProcessFlag('hot');
+const AUTOREFRESH = helpers.hasProcessFlag('autorefresh');
 
 /*
  * Webpack configuration
@@ -30,7 +30,9 @@ module.exports = function (options) {
   return webpackMerge(commonConfig({ env: ENV }), {
     devtool: 'cheap-module-source-map',
     entry: {
-      dev: './resource/js/dev',
+      dev: AUTOREFRESH ?
+        ['./resource/js/dev', 'reload/lib/reload-client']:
+        ['./resource/js/dev'],
     },
     output: {
       path: helpers.root('public/js'),
@@ -74,7 +76,6 @@ module.exports = function (options) {
         })
       }),
 
-      new webpack.HotModuleReplacementPlugin(),
       new webpack.NoEmitOnErrorsPlugin(),
 
     ]

+ 16 - 21
lib/crowi/dev.js

@@ -1,10 +1,8 @@
 const debug = require('debug')('crowi:crowi:dev');
 const path = require('path');
 const webpack = require('webpack');
-const webpackDevMiddleware = require('webpack-dev-middleware');
-const webpackHotMiddleware = require('webpack-hot-middleware');
-const reload = require('reload');
-const chokidar = require('chokidar');
+const helpers = require('./helpers')
+
 
 class CrowiDev {
 
@@ -23,28 +21,25 @@ class CrowiDev {
   }
 
   setupTools() {
-    this.setupWebpackHMR();
-    this.setupReloadServer();
+    if (helpers.hasProcessFlag('autorefresh')) {
+      this.setupReload();
+    }
   }
 
-  setupWebpackHMR() {
-    // Webpack HMR settings
-    const configPath = path.join(this.crowi.rootDir, 'webpack.config');
-    const webpackConfig = require(configPath);
-    var compiler = webpack(webpackConfig);
-    this.app.use(webpackDevMiddleware(compiler, {
-      noInfo: true, publicPath: webpackConfig.output.publicPath
-    }));
-    this.app.use(webpackHotMiddleware(compiler));
-  }
+  setupReload() {
+    const reload = require('reload');
+    const chokidar = require('chokidar');
 
-  setupReloadServer() {
-    // reload settings
-    // see: https://github.com/glenjamin/webpack-hot-middleware
+    // refreshing browser settings
     // see: https://github.com/jprichardson/reload
     const reloadServer = reload(this.server, this.app);
-    // fire reload() when views are modified
-    const watcher = chokidar.watch(path.join(this.crowi.viewsDir));
+
+    const watcher = chokidar.watch([
+      path.join(this.crowi.viewsDir),
+      path.join(this.crowi.publicDir),
+    ]);
+
+    // fire reload() when changes detected
     watcher.on('all', (event, path) => {
       reloadServer.reload();
     });

+ 20 - 0
lib/crowi/helpers.js

@@ -0,0 +1,20 @@
+/**
+ * @author: @AngularClass
+ * @author: Yuki Takei <yuki@weseek.co.jp>
+ */
+
+var path = require('path');
+
+const EVENT = process.env.npm_lifecycle_event || '';
+
+// Helper functions
+var ROOT = path.resolve(__dirname, '..');
+
+function hasProcessFlag(flag) {
+  return process.argv.join('').indexOf(flag) > -1;
+}
+
+var root = path.join.bind(path, ROOT);
+
+exports.hasProcessFlag = hasProcessFlag;
+exports.root = root;

+ 8 - 7
package.json

@@ -94,17 +94,18 @@
     "socket.io": "~1.3.0",
     "socket.io-client": "~1.7.0",
     "sprintf": "~0.1.5",
+    "supervisor": "^0.12.0",
     "swig": "~1.4.0",
     "vinyl-source-stream": "~1.1.0"
   },
   "devDependencies": {
     "assets-webpack-plugin": "^3.5.1",
     "chai": "~1.10.0",
+    "concurrently": "^3.4.0",
     "copy-webpack-plugin": "^4.0.0",
     "css-loader": "^0.27.1",
     "express-webpack-assets": "0.0.2",
     "mocha": "~2.2.0",
-    "nodemon": "^1.11.0",
     "proxyquire": "~1.4.0",
     "reload": "^1.1.1",
     "rimraf": "^2.6.1",
@@ -113,25 +114,25 @@
     "sinon-chai": "~2.7.0",
     "style-loader": "^0.13.2",
     "webpack": "2.2.0",
-    "webpack-dev-middleware": "^1.10.1",
     "webpack-dev-server": "2.4.1",
     "webpack-dll-bundles-plugin": "^1.0.0-beta.5",
-    "webpack-hot-middleware": "^2.17.1",
     "webpack-merge": "~3.0.0"
   },
   "license": "MIT",
   "scripts": {
+    "build:dev:watch": "npm run build:dev -- --watch",
     "build:dev": "npm run clean:public && webpack --config config/webpack.dev.js --progress --profile",
     "build:prod": "npm run clean:public && webpack --config config/webpack.prod.js  --progress --profile --bail",
     "build": "npm run build:dev",
     "clean:public": "npm run rimraf -- public/js",
     "clean:dll": "npm run rimraf -- dll",
     "clean": "npm cache clean && npm run rimraf -- dist dll",
-    "nodemon": "nodemon",
+    "preserver:prod": "npm run build:prod",
     "rimraf": "rimraf",
-    "server:dev": "nodemon --watch lib app.js",
-    "server": "npm run server:dev",
-    "start:dev": "npm run server",
+    "server:dev:watch": "supervisor --watch lib -- app.js",
+    "server:dev": "node app.js",
+    "server:prod": "node app.js",
+    "start:dev": "concurrently --kill-others \"npm run build:dev:watch -- --autorefresh\" \"npm run server:dev:watch -- --autorefresh\"",
     "start": "npm run server:prod",
     "test": "",
     "webpack": "webpack",

+ 0 - 2
resource/js/dev.js

@@ -1,5 +1,3 @@
 /**
  * dev tools
  */
-import 'reload/lib/reload-client';
-import 'webpack-hot-middleware/client';