Webpack编译器实例的promisification?

时间:2017-03-14 09:58:10

标签: javascript node.js webpack bluebird

我正在使用Webpack 2 Node API,我希望使用bluebird宣传run()方法。

import Promise from 'bluebird'
import webpack from 'webpack'

const compiler = webpack(config)
const runAsync = Promise.promisify(compiler.run)

runAsync().then(stats => {
  console.log('stats:', stats)
}).catch(err => {
  console.log('err:', err)
})

我得到的错误是:

  

[TypeError:self.applyPluginsAsync不是函数]

所以我猜测webpack代码的编写方式与bluebird promisification不兼容。

如果还有其他方式来宣传webpack的run()方法..?

所有这些回调和if陈述都在困扰着我。

1 个答案:

答案 0 :(得分:4)

您需要将compiler作为上下文传递给promisify方法。

const runAsync = Promise.promisify(compiler.run, { context: compiler });

或称之为:

runAsync.call(compiler).then(stats => {...

来自蓝鸟Docs

  

请注意,如果节点函数是某个对象的方法,则可以将该对象作为第二个参数传递,如下所示:

var redisGet = Promise.promisify(redisClient.get, {context: redisClient});
redisGet('foo').then(function() {
    //...
});