在AngularJS应用程序中使用node_modules

我刚刚使用Yeoman项目生成器工具生成了一个angular度应用程序。 生成的项目有一个目录“node_modules”。 在这个模块里面有很多可能为array-diff等“预定义的函数”,而且我想在angularJS应用程序(控制器,指令)中使用这些函数。

我尝试过使用RequireJS和Node-Browserfy来使用这些node_modules,但没有成功,每次出现错误。 例如“filter不defiend等…”。 有没有一步一步的教程做这个模块集成到一个AngularJS应用程序?

我的项目结构是: 项目结构

这是我的node.browswerfy生成的bundle.js

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ var myFilter =require('../../node_modules/array-filter/index.js'); },{"../../node_modules/array-filter/index.js":2}],2:[function(require,module,exports){ /** * Array#filter. * * @param {Array} arr * @param {Function} fn * @return {Array} */ module.exports = function (arr, fn) { if (arr.filter) return arr.filter(fn); var ret = []; for (var i = 0; i < arr.length; i++) { if (!hasOwn.call(arr, i)) continue; if (fn(arr[i], i, arr)) ret.push(arr[i]); } return ret; }; var hasOwn = Object.prototype.hasOwnProperty; },{}]},{},[1]); 

这是我的控制器

 'use strict'; /** * @ngdoc function * @name alam2App.controller:MainCtrl * @description * # MainCtrl * Controller of the alam2App */ angular.module('alam2App') .controller('MainCtrl', function ($scope) { var array = [1, 2, 3]; console.log(myFilter (array, function (el, i, arr) { return false; // I throw it on the ground! })); $scope.awesomeThings = [ 'HTML5 Boilerplate', 'AngularJS', 'Karma' ]; }); 

错误消息我在控制台上

 ReferenceError: myFilter is not defined 

文档始终是一个很好的开始, requirejs有很好的文档logging,并且他们的页面引用了node和node_modules的使用, 正好描述了你需要做的事情。

r.js创build了一个你正在使用的所有代码的可部署包,而且它并不r.js你把它放在哪个文件夹中r.js会把你所有的代码捆绑到一个文件中,你简单地把它包含在你的页面中,它执行包含所有您需要的依赖关系。

Angular在模块定义方面做出了一个糟糕的select,当时并不是一个可怕的select,只是一个短视的select,所以你不得不在这样的问题的解决scheme中大声疾呼。 幸运的是,这个社区非常棒,并且提出了多种解决scheme。 尝试寻找结合commonJS模块和AMD模块的方法,或者寻找符合AMD标准的替代scheme。