Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 0 additions & 24 deletions .travis.yml

This file was deleted.

15 changes: 0 additions & 15 deletions appveyor.yml

This file was deleted.

35 changes: 32 additions & 3 deletions lib/command.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ class Command extends BaseCommand {
type: 'boolean',
alias: [ 'ts', 'typescript' ],
},

require: {
description: 'inject to execArgv --require',
type: 'array',
alias: 'r',
},
};

this.logger = new Logger({
Expand All @@ -38,22 +44,45 @@ class Command extends BaseCommand {
const context = super.context;
const { argv, execArgvObj, cwd } = context;

// read `egg.typescript` from package.json
let baseDir = argv._[0] || cwd;
if (!path.isAbsolute(baseDir)) baseDir = path.join(cwd, baseDir);
const pkgFile = path.join(baseDir, 'package.json');
if (fs.existsSync(pkgFile)) {
const pkgInfo = require(pkgFile);
if (pkgInfo && pkgInfo.egg && pkgInfo.egg.typescript) {
const eggInfo = pkgInfo.egg;

// read `egg.typescript` from package.json
if (eggInfo && eggInfo.typescript) {
argv.sourcemap = true;
}

// read `eggScriptsConfig.require` from package.json
const eggScriptsConfig = pkgInfo.eggScriptsConfig;
let requireFiles = Array.isArray(argv.require) ? argv.require : [];
if (eggScriptsConfig && Array.isArray(eggScriptsConfig.require)) {
requireFiles = requireFiles.concat(eggScriptsConfig.require);
}
execArgvObj.require = execArgvObj.require || [];
requireFiles
.filter(injectScript => injectScript)
.forEach(injectScript => {
let requirePath = '';
if (path.isAbsolute(injectScript) || injectScript.startsWith(`.${path.sep}`)) {
requirePath = path.resolve(baseDir, injectScript);
} else {
requirePath = injectScript;
}
execArgvObj.require.push(requirePath);
});

// read argv from eggScriptsConfig in package.json
if (pkgInfo && pkgInfo.eggScriptsConfig && typeof pkgInfo.eggScriptsConfig === 'object') {
if (eggScriptsConfig && typeof eggScriptsConfig === 'object') {
for (const key in pkgInfo.eggScriptsConfig) {
if (argv[key] == null) argv[key] = pkgInfo.eggScriptsConfig[key];
}
}

delete argv.require;
Copy link
Member

@atian25 atian25 Sep 14, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

argv.require 有哪里插入到 execArgvObj.require 了么?(不确定 common-bin 里面的逻辑是否执行了)

下面那个单测,多加个 --require 验证下是否合并了。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/eggjs/egg-scripts/pull/47/files/9f3bcf624beb545d40e1b1e6c39251f93e964f7c#diff-d8db36db6bfb32591336006f1dc1adee9e2caf7b021469995aa687c5c5723d0cR61-R64

这边,这样顺便也解决了 --require 只能传递全路径的易用性(并且兼容以前的全路径传递),两边合并下作为 execObject 传递逻辑上清晰一些

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

// execArgv
Expand Down
8 changes: 8 additions & 0 deletions test/fixtures/pkg-config/config/config.default.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';

exports.keys = '123456';

exports.logger = {
level: 'WARN',
consoleLevel: 'WARN',
};
148 changes: 148 additions & 0 deletions test/fixtures/pkg-config/config/plugin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
'use strict';

module.exports = {
// enable plugins

/**
* app global Error Handling
* @member {Object} Plugin#onerror
* @property {Boolean} enable - `true` by default
*/
onerror: {
enable: false,
package: 'egg-onerror',
path: 'xxxxx',
},

/**
* session
* @member {Object} Plugin#session
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
session: {
enable: false,
package: 'egg-session',
path: 'xxxxx',
},

/**
* i18n
* @member {Object} Plugin#i18n
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
i18n: {
enable: false,
package: 'egg-i18n',
path: 'xxxxx',
},

/**
* file and dir watcher
* @member {Object} Plugin#watcher
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
watcher: {
enable: false,
package: 'egg-watcher',
path: 'xxxxx',
},

/**
* multipart
* @member {Object} Plugin#multipart
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
multipart: {
enable: false,
package: 'egg-multipart',
path: 'xxxxx',
},

/**
* security middlewares and extends
* @member {Object} Plugin#security
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
security: {
enable: false,
package: 'egg-security',
path: 'xxxxx',
},

/**
* local development helper
* @member {Object} Plugin#development
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
development: {
enable: false,
package: 'egg-development',
path: 'xxxxx',
},

/**
* logger file rotator
* @member {Object} Plugin#logrotator
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
logrotator: {
enable: false,
package: 'egg-logrotator',
path: 'xxxxx',
},

/**
* schedule tasks
* @member {Object} Plugin#schedule
* @property {Boolean} enable - `true` by default
* @since 2.7.0
*/
schedule: {
enable: false,
package: 'egg-schedule',
path: 'xxxxx',
},

/**
* `app/public` dir static serve
* @member {Object} Plugin#static
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
static: {
enable: false,
package: 'egg-static',
path: 'xxxxx',
},

/**
* jsonp support for egg
* @member {Function} Plugin#jsonp
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
jsonp: {
enable: false,
package: 'egg-jsonp',
path: 'xxxxx',
},

/**
* view plugin
* @member {Function} Plugin#view
* @property {Boolean} enable - `true` by default
* @since 1.0.0
*/
view: {
enable: false,
package: 'egg-view',
path: 'xxxxx',
},
};
3 changes: 3 additions & 0 deletions test/fixtures/pkg-config/inject.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
'use strict';

console.log('@@@ inject relative js by pkgInfo');
3 changes: 3 additions & 0 deletions test/fixtures/pkg-config/inject2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
'use strict';

console.log('@@@ inject by cli');
13 changes: 13 additions & 0 deletions test/fixtures/pkg-config/node_modules/custom-framework/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/fixtures/pkg-config/node_modules/inject/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions test/fixtures/pkg-config/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "example",
"version": "1.0.0",
"egg": {
"framework": "custom-framework"
},
"eggScriptsConfig": {
"require": [
"./inject.js",
"inject"
]
}
}
2 changes: 1 addition & 1 deletion test/fixtures/ts-pkg/app/controller/home.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default class AppController extends Controller {
public index() {
try {
throw new Error('some err');
} catch (err) {
} catch (err: any) {
this.ctx.logger.error(err);
this.ctx.body = {
msg: err.message,
Expand Down
2 changes: 1 addition & 1 deletion test/fixtures/ts/app/controller/home.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default class AppController extends Controller {
public index() {
try {
throw new Error('some err');
} catch (err) {
} catch (err: any) {
this.ctx.logger.error(err);
this.ctx.body = {
msg: err.message,
Expand Down
34 changes: 33 additions & 1 deletion test/start.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,34 @@ describe('test/start.test.js', () => {
afterEach(mm.restore);

describe('start without daemon', () => {
describe('read pkgInfo', () => {
let app;
let fixturePath;

before(function* () {
fixturePath = path.join(__dirname, 'fixtures/pkg-config');
yield utils.cleanup(fixturePath);
});

after(function* () {
app.proc.kill('SIGTERM');
yield utils.cleanup(fixturePath);
});

it('should --require', function* () {
app = coffee.fork(eggBin, [ 'start', '--workers=1', '--require=./inject2' ], { cwd: fixturePath });
app.debug();
app.expect('code', 0);

yield sleep(waitTime);

assert(app.stderr === '');
assert(app.stdout.match(/@@@ inject relative js by pkgInfo/));
assert(app.stdout.match(/@@@ inject node_modules by pkgInfo/));
assert(app.stdout.match(/@@@ inject by cli/));
});
});

describe('full path', () => {
let app;

Expand Down Expand Up @@ -551,7 +579,11 @@ describe('test/start.test.js', () => {
const exitEvent = awaitEvent(app.proc, 'exit');
app.proc.kill('SIGTERM');
const code = yield exitEvent;
assert(code === 0);
if (isWin) {
assert(code === null);
} else {
assert(code === 0);
}
});
});
});
Expand Down
4 changes: 2 additions & 2 deletions test/stop.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe('test/stop.test.js', () => {
const timeoutPath = path.join(__dirname, 'fixtures/stop-timeout');
const homePath = path.join(__dirname, 'fixtures/home');
const logDir = path.join(homePath, 'logs');
const waitTime = '10s';
const waitTime = '15s';

before(function* () {
yield mkdirp(homePath);
Expand Down Expand Up @@ -271,7 +271,7 @@ describe('test/stop.test.js', () => {
describe('stop all with timeout', function() {
let app;
let killer;
this.timeout(12000);
this.timeout(17000);
beforeEach(function* () {
yield utils.cleanup(timeoutPath);
app = coffee.fork(eggBin, [ 'start', '--workers=2', '--title=stop-timeout', timeoutPath ]);
Expand Down