迁移到Webpack / ES6 - 依赖注入失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迁移到Webpack / ES6 - 依赖注入失败相关的知识,希望对你有一定的参考价值。

作为迁移到webpack的一部分,我必须迁移一个库,然后将调用更改为它。我试图对库进行最小的更改,以防止任何向后兼容性问题。这是修改后的库代码:

(function() {

  // only added part to the library
  if (typeof module === 'object' && module.exports) {
    module.exports = mdPickerColors;
  }
  // end of added part

  angular
    .module('mdColorMenu', ['ngAria', 'ngAnimate', 'ngMaterial'])
    .factory('mdPickerColors', ['$mdColorPalette', '$mdPanel', mdPickerColors])
    .directive('mdColorMenu', mdColorMenuDirective);

  function mdPickerColors($mdColorPalette, $mdPanel) {
    //...
  }
  //...
})();

然后在我的代码中,我有一个看起来像这样的index.js

import angular from 'angular';

import myService from './myService';

import mdPickerColors from 'md-color-menu';

export default angular.module('myModule', [mdPickerColors])
  .service('myService', myService)
  .name;

最后,myService.js看起来像这样:

import angular from 'angular';

export default function myService(mdPickerColors, /*...*/) {
  //...
}

但是,我得到错误Error: [$injector:unpr] Unknown provider: $mdPanel。然而,第一个依赖($mdColorPalette)正确注入。

附加信息:

  • 我使用角度版本1.6.4,角度材料版本1.1.4。
  • 当我只是在<script>标签中导入文件时,它按预期工作。

有任何想法吗?

更新:我注意到我直接导出工厂,而不是模块。这意味着我将工厂声明为模块依赖,这听起来不对。可能是原因吗?

答案

我知道这是愚蠢的事。这个:

if (typeof module === 'object' && module.exports) {
  module.exports = mdPickerColors;
}

应该替换为:

module.exports = angular.module('mdColorMenu').name;

以上是关于迁移到Webpack / ES6 - 依赖注入失败的主要内容,如果未能解决你的问题,请参考以下文章

迁移到 Webpack 2 后,gulp 或 webpack-stream 导致 webpack 构建失败

React + Webpack + babel7 解析 es6 样式函数赋值失败

我可以将依赖项注入迁移(使用 EF-Core 代码优先迁移)吗?

Webpack Error React & ES6 之前在 Babelify 下工作

使用 Typescript 和 Webpack 管理依赖项的 AngularJS

react+webpack+ES6搭建项目