-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
134 lines (111 loc) · 4.05 KB
/
app.js
File metadata and controls
134 lines (111 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
* app.js
*
* Use `app.js` to run your app without `sails lift`.
* To start the server, run: `node app.js`.
*
* This is handy in situations where the sails CLI is not relevant or useful.
*
* For example:
* => `node app.js`
* => `forever start app.js`
* => `node debug app.js`
* => `modulus deploy`
* => `heroku scale`
*
*
* The same command-line arguments are supported, e.g.:
* `node app.js --silent --port=80 --prod`
*/
// Ensure we're in the project directory, so relative paths work as expected
// no matter where we actually lift from.
ignoreRequireCSS();
require('node-jsx-babel').install();
var ProgressPlugin = require('webpack/lib/ProgressPlugin');
// Ensure a "sails" can be located:
(function () {
var sails;
try {
sails = require('sails');
} catch (e) {
console.error('To run an app using `node app.js`, you usually need to have a version of `sails` installed in the same directory as your app.');
console.error('To do that, run `npm install sails`');
console.error('');
console.error('Alternatively, if you have sails installed globally (i.e. you did `npm install -g sails`), you can use `sails lift`.');
console.error('When you run `sails lift`, your app will still use a local `./node_modules/sails` dependency if it exists,');
console.error('but if it doesn\'t, the app will run with the global sails instead!');
return;
}
// Try to get `rc` dependency
var rc;
try {
rc = require('rc');
} catch (e0) {
try {
rc = require('sails/node_modules/rc');
} catch (e1) {
console.error('Could not find dependency: `rc`.');
console.error('Your `.sailsrc` file(s) will be ignored.');
console.error('To resolve this, run:');
console.error('npm install rc --save');
rc = function () {
return {};
};
}
}
// Start server
sails.lift(rc('sails'), function (err) {
if (err) return sails.log.error(err);
webpackTask(process.env.NODE_ENV);
});
sails.LIFT_TIME = Date.now();
})();
function webpackTask(env) {
var webpack = require('webpack'),
webpackCfg = env == 'development' ? require('./webpack.config.dev.js') : require('./webpack.config.prod.js'),
webpackCompiler = webpack(webpackCfg, function (err, stats) {
if (err) throw err;
sails.log.info('webpack: compiler loaded.');
if (sails.config.environment !== 'production') {
sails.log.info('webpack: watching...');
webpackCompiler.watch({aggregateTimeout: 300, poll: true}, afterBuild);
}
else {
sails.log.info('webpack: running...');
webpackCompiler.run(afterBuild);
}
});
webpackCompiler.apply(new ProgressPlugin(function (percentage, msg) {
var lineBreak = (percentage == 1) ? '\n' : '';
process.stdout.write('\r webpack progress: ' + ((percentage) * 100).toFixed(0) + '%' + lineBreak);
}));
function afterBuild(err, rawStats) {
if (err) {
sails.log.error('webpack watch fail');
} else {
var jsonStats = rawStats.toJson();
if (jsonStats.errors.length > 0) {
sails.log.error('wabpack compiled error:\n');
return dealWebpackErrors(jsonStats.errors, 'error');
}
if (jsonStats.warnings.length > 0) {
sails.log.warn('wabpack compiled warn:\n');
return dealWebpackErrors(jsonStats.warnings, 'warn');
}
sails.log.info('webpack watch files changed and compiled success');
}
}
}
function ignoreRequireCSS() {
require.extensions['.css'] = function (module, filename) {
// Do nothing.
};
require.extensions['.less'] = function (module, filename) {
// Do nothing.
};
}
function dealWebpackErrors(errors, type) {
errors.forEach(function (v, k) {
sails.log[type](v);
});
}