2016-11-22 3 views
1

Я использую webpack 1.13.3._webpack_require вернуть пустой объект модуля

_webpack_require возвращает пустой объект модуля. ожидаемый результат 'a.js' объектный модуль ..

исходный код:

a.js

require.ensure([], function() { 

    var module = {}; 

    module.init = function() { 
    console.log('a'); 
    }; 

    return module; 
}) 

entry.js

require([], function() { 
    console.log(require('./a')) 
    require('./a').init(); 
}) 

index.html

<script type="text/javascript" charset="utf-8" src="./main.js"> 
</script> 

webpa ck.config.js

module.exports = { 
    entry: './entry.js', 
    output: { 
    filename: '[name].js' 
    } 
} 

сборки с webpack.config.js и открытым index.html с браузером. появляется ошибка.

console.log (требуется («./ а»)) это протоколирование код просто пустой объект „{}“

ответ

2

Я думаю, что вы пытаетесь использовать модули AMD с WebPack, но вы гораздо лучше просто используя стиль модуля CommonJS. Это то, для чего был создан веб-пакет, очень просто и прекрасно работает!

Попробуйте следующие вместо:

a.js

module.exports = {}; // module.exports is what will be returned if you require() this file. 

module.exports.init = function() { 
    console.log('a'); 
} 

// OR 

module.exports = { 
    init: function() { 
    console.log('a'); 
    }, 
}; 

entry.js

require('./a').init(); 

Ваш WebPack конфигурации и HTML не нужны изменения.

Как вы можете видеть, намного проще! Webpack автоматически обертывает эти модули функцией, ничто не просачивается глобально.

+0

На самом деле, мой старый код использует AMD. поэтому я использовал стиль AMD. но thx! –

+1

@mJane, в webpack вы можете использовать AMD для замены, но нет возможности экспортировать переменные с AMD. – Ambroos