Only include modules from Angular Material that I need

核能气质少年 提交于 2020-01-14 12:52:16

问题


I'm using the module $mdDialog from Angular Material but I don't need the full library. Is it possible to only include the modules that I need in the project, and how can I do that? I have installed Angular Material with Bower and using Gulp in my project.


回答1:


Soon Angular Material will turn into v1.1.0 as a major release.

As an addition the material-tools repository will be announced.

Material Tools allows developers to build a custom Angular Material build with the most necessary components.

It also can build precompiled theme stylesheets, which improves the performance significantly.

Material Tools is already available, but still in beta.

https://github.com/angular/material-tools




回答2:


As per my comment above, $mdDialog depends on angular-material.js, which depends on angular.js, angular-aria.js and angular-animate.js. I don't think there's any way around that.

Although you are using Angular Material I would like to suggest an alternative - Polymer, which is similar to and consistent in style with Angular Material. This suggestion is related to you not wanting to load lots of dependencies.

The advantage of using Polymer is that you can include separate elements, for example paper-dialog - demo

From the docs




回答3:


You choose only the components you want, by making a custom angularjs build from angular material git repository as follows

  • download or clone the angular material repo.
  • go the repository folder and execute "npm install" or "npm update"

For custom js build

In the "\gulp" folder edit the util.js, update the buildJs() function

    function buildJs () {
     // original code commented
     //var jsFiles = config.jsBaseFiles.concat([path.join(config.paths, '*.js')]);  

      var jsFiles = config.jsBaseFiles;

      //adding the paths of components you want
      jsFiles.push('src/components/icon/**/*.js');
      jsFiles.push('src/components/showHide/**/*.js');
      jsFiles.push('src/components/virtualRepeat/**/*.js');
      jsFiles.push('src/components/dialog/**/*.js');
  • run "gulp build" and find the js files in "\dist" folder

I am using angularjs with webpack, I copied the "angular-material.js" to "\node_modules\angular-material" in my application and I was able to make a build without any changes.

For building custom css

edit "build-scss.js" in "\gulp\tasks" folder in the repository. edit the getPaths() function

function getPaths () {
    var paths = config.scssBaseFiles.slice();
    if ( modules ) {
      paths.push.apply(paths, modules.split(',').map(function (module) {
        return 'src/components/' + module + '/*.scss';
      }));
    } else {
     // original code commented
     // paths.push('src/components/**/*.scss');
      paths.push('src/core/services/layout/**/*.scss');

       //add the paths of components you want     
        paths.push('src/components/icon/**/*.scss');
        paths.push('src/components/showHide/**/*.scss');
        paths.push('src/components/virtualRepeat/**/*.scss');
        paths.push('src/components/datepicker/**/*.scss');
        paths.push('src/components/autocomplete/**/*.scss');
        paths.push('src/components/backdrop/**/*.scss');
        paths.push('src/components/dialog/**/*.scss');
  • "gulp build" will also build css in the "\dist" folder

I hope it helps, please comment in case angular material gulp build is changed.

Other way

when you install angularjs with npm, you can find js and css files for each component in "\node_modules\angular-material\modules\js" you can use your custom build to concatinate them.



来源:https://stackoverflow.com/questions/38784394/only-include-modules-from-angular-material-that-i-need

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!