2017-08-10 75 views
0

问题:噶的WebPack,巴贝尔奇怪的进口行为

当我第一次导入模块导出的函数是不确定的。 在例外情况下定义模块。

为什么没有定义!?!?


场景:

主文件

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' 
    }); 
}; 

的WebPack配置:

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已被导出,这导致它在那一刻未定义。

无论是我的配置文件或完全损坏。

回答

0

发生这种情况的原因是因为循环导入循环。 我只是需要更改代码的运行位置。 (或进口订单)