ПРОБЛЕМА:
Когда я впервые импортирую модуль, экспортируемая функция не определена. В исключении определяется модуль.
Почему не определено!?!?
СЦЕНАРИЙ:
Основной файл
import { UserClass } from './user';
import { query, Client } from 'faunadb';
import { FaunaClass } from '../class';
console.log('init', typeof UserClass, typeof FaunaClass, typeof query);
export function initialise (client : Client) {
return new Promise((resolve, reject) => {
const CLASSES : (typeof FaunaClass)[] = [
UserClass
];
let count = 0;
const total = CLASSES.length;
console.log('classes', CLASSES);
CLASSES.forEach(cl =>
client.query(query.CreateClass({ name: cl.className }))
.then(checkDone)
.catch(reject));
function checkDone () {
count += 1;
if (total === count) {
resolve();
}
}
})
.catch(e => {
console.log('on catch', UserClass);
console.log(e.message);
});
}
как видите, внутри этой функции есть несколько журналов консоли. Вывод на karma start
:
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'init', 'undefined', 'undefined', 'object'
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'classes', [undefined]
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'on catch', function UserClass() { ... }
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'undefined is not an object (evaluating 'cl.className')'
PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 1 of 1 SUCCESS (0.933 secs / 0.928 secs)
UserClass.ts:
import { FaunaClass } from '../class';
export class UserClass extends FaunaClass {
static className = 'users';
}
** ФАЙЛЫ КОНФИГУРАЦИИ:**
karma.conf.js
const webpackConfig = require('./webpack.config');
const webpack = require('webpack');
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'chai', 'sinon'],
files: [
'src/**/*.spec.ts'
],
preprocessors: {
'**/*.ts': ['webpack', 'sourcemap']
},
webpack: {
module: webpackConfig.module,
resolve: webpackConfig.resolve,
devtool: 'inline-source-map'
},
// Webpack please don't spam the console when running in karma!
webpackServer: { noInfo: true },
reporters: ['progress'],
colors: true,
autoWatch: true,
logLevel: config.LOG_INFO,
browsers: ['PhantomJS'],
singleRun: false,
concurrency: 'Infinity'
});
};
Конфигурация веб-пакета:
var path = require('path');
module.exports = {
entry: './handler.ts',
target: 'node',
module: {
loaders: [
{
test: /\.tsx?$/,
loaders: ['babel-loader', 'ts-loader'],
exclude: [/node_modules/]
},
{ test: /\.json$/, loader: 'json-loader' },
]
},
resolve: {
extensions: ['.ts', '.js', '.tsx', '.jsx']
},
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, '.webpack'),
filename: 'handler.js'
}
};
Итак, как вы можете видеть, ведение журнала UserClass
в начале не определено, и когда в промисе выдается исключение, класс становится определенным.
У меня такое ощущение, что по какой-то причине он выполняет код до того, как UserClass
был экспортирован, что приводит к тому, что в этот момент он не определен.
Либо так, либо мои файлы конфигурации полностью сломаны.