2016-02-23 4 views
9

Я сконфигурированный Webpack так:почему требуется («угловатый») возвращает пустой объект

resolve: { 
    alias: { 
     angular: path.join(__dirname, './node_modules/angular/angular.js') 
    } 
}, 

и в моем файле я требую угловатый, как это:

var angular = require("angular"); 

Но по какой-то причине пустой объект возвращается, почему?

+1

Угловой 1 не поддерживает модули CommonJS, поэтому он «экспортирует» пустой объект. Вместо этого просто требуйте его (без присвоения результата): require ('angleular') – Rahul

+0

Да, сейчас он работает, спасибо, можете ли вы разместить его в качестве ответа? –

+0

, пожалуйста, проверьте мой ответ – Rahul

ответ

4

Другие ответы не дают рабочего решения. Это правда, что Angular 1 не работает хорошо с webpack из коробки (см. https://github.com/webpack/webpack/issues/2049), но его можно загрузить с помощью прокладки. Попробуйте WebPack загрузчик конфигурации:

module: { 
    loaders: [ 
     /* 
     * Necessary to be able to use angular 1 with webpack as explained in https://github.com/webpack/webpack/issues/2049 
     */ 
     { 
      test: require.resolve('angular'), 
      loader: 'exports?window.angular' 
     }, 
    ] 
}, 
plugins: [ 
    new webpack.ProvidePlugin({ 
     'angular': 'angular', 
    }), 
], 

Это должен инициализировать угловой объект должным образом, вместо действия по умолчанию, установив его на пустой объект (который не имеет свойства с именем модуль).

1

Угловой 1 не поддерживает модули CommonJS, поэтому он «экспортирует» пустой объект.

Вместо этого просто требуют (без присвоения результата):

require('angular') 
1

концептуальный ответ -

Угловое 1.x не поддерживает CommonJS модулей, поэтому следующие подхода экспортные доходы empty object:

var angular = require("angular"); 

Так лучше опустить var angular часть и просто сделать использование require("angular");

3

Другие ответы не совсем точны - это правда, что файл ядра angular.js не поддерживает CommonJS, но если вы установите его с НПМ, предоставляется крошечный файл-обертка index.js. Это буквально всего две строки:

require('./angular'); // Runs angular.js, which attaches to the window object 
module.exports = angular; // Exports the global variable 

Это позволяет использовать его в средах CommonJS, как обычно. Так что если вы обновляете ваш конфиг, как это так, он должен работать:

resolve: { 
    alias: { 
     angular: path.join(__dirname, './node_modules/angular/index.js') 
    } 
}, 

(Тем не менее, это должно быть поведение WebPack по умолчанию, даже если вы не псевдоним angular, а index.js помечается как основной файл угловых в его package.json - вы, вероятно, можете уйти, просто не используя псевдоним!)

+0

отлично, спасибо за ваше предложение, я обязательно попробую его –

+0

Это мне очень помогает! Благодаря! –

+0

По какой-то причине эта обертка не делает этого трюка. «Угловая» переменная после требования («угловая») является пустым объектом, но window.angular содержит правильный угловой объект. Таким образом, требуется конфигурация этого загрузчика: {test: require.resolve ('angleular'), loader: окно экспорта.angular '}, – Motin

Смежные вопросы