私はMEAN JavaScriptスタックを使用したかったのですが、独自のWebサイトとインストール方法のいずれかである2つの異なるスタック、mean.jsとmean.ioがあることに気付きました。それで私は自分にこの質問を尋ねました:「どちらを使用しますか?」
それで、この質問に答えるために、私はコミュニティにこれらの2つの違いは何であるかを説明できるかどうか尋ねます。そして、もし可能なら賛否両論?彼らは私にとてもよく似ているからです。
私はMEAN JavaScriptスタックを使用したかったのですが、独自のWebサイトとインストール方法のいずれかである2つの異なるスタック、mean.jsとmean.ioがあることに気付きました。それで私は自分にこの質問を尋ねました:「どちらを使用しますか?」
それで、この質問に答えるために、私はコミュニティにこれらの2つの違いは何であるかを説明できるかどうか尋ねます。そして、もし可能なら賛否両論?彼らは私にとてもよく似ているからです。
回答:
基本的には同じです...どちらもテンプレートにswigを使用し、テスト、パスポート統合、nodemonなどにkarmaとmochaを使用しています。
なぜそんなに似ているのですか?Mean.jsはMean.ioの分岐であり、両方のイニシアチブは同じ人によって開始されました ... Mean.ioは会社Linnovateの傘下にあり、その人(Amos Haviv)がこの会社とのコラボレーションを停止し、 Mean.jsを開始しました。理由について詳しくは、こちらをご覧ください。
今...あなたが今見ることができる主な(または少しの)違いは:
足場とボイラープレートの生成
Mean.ioは「mean」という名前のカスタムcliツールを使用します
Mean.jsはYeomanジェネレーターを使用します
モジュール性
Mean.ioは、モジュール内にクライアントファイルとサーバーファイルを備えた、より自己完結型のノードパッケージモジュールを使用します。
Mean.jsはフロントエンド(angularの場合)でのみモジュールを使用し、それらをExpressに接続します。垂直モジュールにも取り組んでいましたが...
ビルドシステム
Mean.ioは最近飲み込むために移動した
Mean.jsがうなり声を使用しています
導入
どちらもそれぞれのリポジトリにDockerfileがあり、Mean.ioはGoogle Compute Engineにワンクリックでインストールできますが、Mean.jsはDigital Oceanにワンクリックでインストールすることもできます。
ドキュメンテーション
Mean.ioにはokドキュメントがあります
Mean.jsにはAWESOMEドキュメントがあります
コミュニティ
Mean.ioは元の定型文だったため、コミュニティが大きくなっています
。Mean.jsは勢いは少なく、着実に成長しています
個人レベルでは、MeanJSの哲学と開放性、およびMeanIOの牽引力とモジュール/パッケージアプローチのほうが好きです。どちらもすばらしいので、おそらくそれらを変更することになるので、どちらか一方を選択するのに失敗することはありません。それらを開始点として、また学習課題として使用してください。
MEANは、「Mongo + Express + Angular + Node」をスタックのベースとして使用するボイラープレート/フレームワークを表す一般的な方法(Valeri Karpovによって造られた)です。このスタックを使用して、他の金種を使用するフレームワークを見つけることができます。それらのいくつかは、RAD(Rapid Application Development)およびSPAの構築に非常に適しています。例えば:
ハッカソンスターターもあります。AにはMEAN(「MEN」)はありませんが、揺れます。
楽しんで!
まず、MEANはM ongoDB、E xpress、A ngular、Nの頭字語です。 ode.jsの
これらの技術を組み合わせて「スタック」で使用することを一般的に識別します。「のようなものはありません MEANフレームワーク」。
LIOR KesosでLinnovateは、この混乱の利点を取りました。彼はドメインMEAN.ioを購入し、いくつかのコードを https://github.com/linnovate/meanに配置しました
彼らは幸運にも多くの宣伝を受けました、そして、それらはMEANに関するますます多くの記事とビデオです。Googleの「平均フレームワーク」では、mean.ioがリストの最初にあります。
残念ながら、https://github.com/linnovate/meanのコードは設計が不十分のようですです。
2月に私は自分で罠に落ちました。サイトmean.ioにはキャッチーなデザインがあり、Githubリポジトリには1000を超えるスターがありました。品質に疑問を投げかけるという考えは、私の心にも通じませんでした。私はそれを試し始めましたが、うまくいかなかったことやコードの不可解な部分につまずくのにそれほど長くはかかりませんでした。
コミット履歴もかなり心配でした。彼らはコードとディレクトリ構造を何度も再設計し、新しい変更のマージには時間がかかりすぎています。
mean.ioとmean.jsの両方のコードの優れた点は、Bootstrap統合が付属していることです。PassportJsを介したFacebook、Github、Linkedinなどの認証も付属していますと、AngularJSのフロントエンドモデルと同期するMongoDBのバックエンドのモデル(記事)の例ます。
Linnovateのウェブサイトによると:
Linnovateはイスラエルで有数のオープンソース企業であり、国内で最も経験豊富なチームを持ち、ハイエンドのオープンソースソリューションの作成に取り組んでいます。Linnovateは、企業が次のWebプロジェクトを構築および維持するためのAZサービスを提供するイスラエルで唯一の企業です。
Webサイトから、彼らのコアスキルセットはDrupal(PHPコンテンツ管理システム)であるように見え、最近になってNode.jsとAngularJSを使い始めました。
最近Mean.jsブログを読んでいましたをがより明確になりました。私の理解では、メインのJavascript開発者(Amos Haviv)はLinnovateを離れてMean.jsに取り組み、MEAN.ioプロジェクトは、物事がどのように機能するかを理解するのを遅らせている初心者のNode.js開発者と一緒に残しました。
将来的には変更される可能性がありますが、今のところ、mean.ioの使用は避けます。クイックスタートのボイラープレートを探しているのであれば、mean.jsはmean.ioよりも優れたオプションのようです。
ここでは、いくつかのアプリケーションスターター/ジェネレーターと、MEAN.js、MEAN.io、cleverstackなどの他のテクノロジーを並べて比較します。私は時間を見つけ、代替案を追加し続け、それが発生すると、潜在的に提供されるメリットのリストも増え続けます。現在、最大で1600前後です。その正確性または完全性を向上させる手助けをしたい場合は、次のリンクをクリックして、知っていることについてアンケートを行ってください。
このデータベースから、システムは次のようなレポートを生成します。
私の比較スプレッドシートのスタータートレードオフシートには、各発電機間の包括的な1対1の比較があります。だからあなたのお気に入りについて話すために歪んだ方法で素晴らしいものを選ぶ必要はもうありません。
以下は、generator-angular-fullstackとMEAN.jsの間のものです。パーセンテージは、パーフェクトジェネレーターが100%になる私の個人的な重み付けに基づいた各利点の値です
generator- angular- fullstackは、MEANJS.orgが提供しない8%を提供します
MeanJS.org。generator-angular-fullstackが提供しない9%を提供します
これは、より読みやすい形式のMEAN.ioとMEAN.jsの間のものです
<table border="1" cellpadding="10"><tbody><tr><td valign="top" width="33%"><br><br><h1>MeanJS.org. provides these benefits that MEAN.io. doesn't</h1><br><br><b>Help</b>:<br> * Dedicated/searchable user group for questions, using github issues<br> * There's a book about it<br><b>File Organization</b>:<br> * Basic sourcecode organization, module(->submodule)->side<br> * Module directories hold directives<br><b>Code Modularization</b>:<br> * Approach to AngularJS modules, Only one module definition per file<br> * Approach to AngularJS modules, Don’t alter a module other than where it is defined<br><b>Model</b>:<br> * Object-relational mapping<br> * Server-side validation, server-side example<br> * Client side validation, using Angular 1.3<br><b>View</b>:<br> * Approach to AngularJS views, Directives start with "data-"<br> * Approach to data readiness, Use ng-init<br><b>Control</b>:<br> * Approach to frontend routing or state changing, URLs start with '#!'<br> * Approach to frontend routing or state changing, Use query parameters to store route state<br><b>Support for things</b>:<br> * Languages, LESS<br> * Languages, SASS<br><b>Syntax, language and coding</b>:<br> * JavaScript 5 best practices, Don't use "new"<br><b>Testing</b>:<br> * Testing, using Mocha<br> * End-to-end tests<br> * End-to-end tests, using Protractor<br> * Continuous integration (CI), using Travis<br><b>Development and debugging</b>:<br> * Command line interface (CLI), using Yeoman<br><b>Build</b>:<br> * Build configurations file(s)<br> * Deployment automation, using Azure<br> * Deployment automation, using Digital Ocean, screencast of it<br> * Deployment automation, using Heroku, screencast of it<br><b>Code Generation</b>:<br> * Input application profile<br> * Quick install?<br> * Options for making subcomponents<br> * config generator<br> * controller (client side) generator<br> * directive generator<br> * filter generator<br> * route (client side) generator<br> * service (client side) generator<br> * test - client side<br> * view or view partial generator<br> * controller (server side) generator<br> * model (server side) generator<br> * route (server side) generator<br> * test (server side) generator<br><b>Implemented Functionality</b>:<br> * Account Management, Forgotten Password with Resetting<br> * Chat<br> * CSV processing<br> * E-mail sending system<br> * E-mail sending system, using Nodemailer<br> * E-mail sending system, using its own e-mail implementation<br> * Menus system, state-based<br> * Paypal integration<br> * Responsive design<br> * Social connections management page<br><b>Performance</b>:<br> * Creates a favicon<br><b>Security</b>:<br> * Safe from IP Spoofing<br> * Authorization, Access Contol List (ACL)<br> * Authentication, Cookie<br> * Websocket and RESTful http share security policies<br><br><br></td><td valign="top" width="33%"><br><br><h1>MEAN.io. provides these benefits that MeanJS.org. doesn't</h1><br><br><b>Quality</b>:<br> * Sponsoring company<br><b>Help</b>:<br> * Docs with flatdoc<br><b>Code Modularization</b>:<br> * Share code between projects<br> * Module manager<br><b>View</b>:<br> * Approach to data readiness, Use state.resolve()<br><b>Control</b>:<br> * Approach to frontend code loading, Use AMD with Require.js<br> * Approach to frontend code loading, using wiredep<br> * Approach to error handling, Server-side logging<br><b>Client/Server Communication</b>:<br> * Centralized event handling<br> * Approach to XHR calls, using $http and $q<br><b>Syntax, language and coding</b>:<br> * JavaScript 5 best practices, Wrap code in an IIFE (SEAF, SIAF)<br><b>Development and debugging</b>:<br> * API introspection report and testing interface, using Swagger<br> * Command line interface (CLI), using Independent command line interface<br><b>Build</b>:<br> * Development build, add IIFEs (SEAF, SIAF) to executable copies of code<br> * Deployment automation<br> * Deployment automation, using Heroku<br><b>Code Generation</b>:<br> * Scaffolding undo (mean package -d <name>)<br> * FEATURE (a.k.a. module, entity) generator, Menu items added for new features<br><b>Implemented Functionality</b>:<br> * Admin page for users and roles<br> * Content Management System (Use special data-bound directives in your templates.<br>Switch to edit mode and you can edit the values right where you see them)<br> * File Upload<br> * i18n, localization<br> * Menus system, submenus<br> * Search<br> * Search, actually works with backend API<br> * Search, using Elastic Search<br> * Styles, using Bootstrap, using UI Bootstrap AngularJS directives<br> * Text (WYSIWYG) Editor<br> * Text (WYSIWYG) Editor, using medium-editor<br><b>Performance</b>:<br> * Instrumentation, server-side<br><b>Security</b>:<br> * Serverside authenticated route restriction<br> * Authentication, using Oauth, Link multiple Oauth strategies to one account<br> * Authentication, JSON Web Token (JWT)<br><br><br></td><td valign="top" width="33%"><br><br><h1>MEAN.io. and MeanJS.org. both provide these benefits</h1><br><br><b>Quality</b>:<br> * Version Control, using git<br><b>Platforms</b>:<br> * Client-side JS Framework, using AngularJS<br> * Frontend Server/ Framework, using Node.JS<br> * Frontend Server/ Framework, using Node.JS, using Express<br> * API Server/ Framework, using NodeJS<br> * API Server/ Framework, using NodeJS, using Express<br><b>Help</b>:<br> * Dedicated/searchable user group for questions<br> * Dedicated/searchable user group for questions, using Google Groups<br> * Dedicated/searchable user group for questions, using Facebook<br> * Dedicated/searchable user group for questions, response time mostly under a day<br> * Example application<br> * Tutorial screencast in English<br> * Tutorial screencast in English, using Youtube<br> * Dedicated chatroom<br><b>File Organization</b>:<br> * Basic sourcecode organization, module(->submodule)->side, with type subfolders<br> * Module directories hold controllers<br> * Module directories hold services<br> * Module directories hold templates<br> * Module directories hold unit tests<br> * Separate route configuration files for each module<br><b>Code Modularization</b>:<br> * Modularized Functionality<br> * Approach to AngularJS modules, No global 'app' module variable<br> * Approach to AngularJS modules, No global 'app' module variable without an IIFE<br><b>Model</b>:<br> * Setup of persistent storage<br> * Setup of persistent storage, using NoSQL db<br> * Setup of persistent storage, using NoSQL db, using MongoDB<br><b>View</b>:<br> * No XHR calls in controllers<br> * Templates, using Angular directives<br> * Approach to data readiness, prevents Flash of Unstyled/compiled Content (FOUC)<br><b>Control</b>:<br> * Approach to frontend routing or state changing, example of it<br> * Approach to frontend routing or state changing, State-based routing<br> * Approach to frontend routing or state changing, State-based routing, using ui-router<br> * Approach to frontend routing or state changing, HTML5 Mode<br> * Approach to frontend code loading, using angular.bootstrap()<br><b>Client/Server Communication</b>:<br> * Serve status codes only as responses<br> * Accept nested, JSON parameters<br> * Add timer header to requests<br> * Support for signed and encrypted cookies<br> * Serve URLs based on the route definitions<br> * Can serve headers only<br> * Approach to XHR calls, using JSON<br> * Approach to XHR calls, using $resource (angular-resource)<br><b>Support for things</b>:<br> * Languages, JavaScript (server side)<br> * Languages, Swig<br><b>Syntax, language and coding</b>:<br> * JavaScript 5 best practices, Use 'use strict'<br><b>Tool Configuration/customization</b>:<br> * Separate runtime configuration profiles<br><b>Testing</b>:<br> * Testing, using Jasmine<br> * Testing, using Karma<br> * Client-side unit tests<br> * Continuous integration (CI)<br> * Automated device testing, using Live Reload<br> * Server-side integration & unit tests<br> * Server-side integration & unit tests, using Mocha<br><b>Development and debugging</b>:<br> * Command line interface (CLI)<br><b>Build</b>:<br> * Build-time Dependency Management, using npm<br> * Build-time Dependency Management, using bower<br> * Build tool / Task runner, using Grunt<br> * Build tool / Task runner, using gulp<br> * Development build, script<br> * Development build, reload build script file upon change<br> * Development build, copy assets to build or dist or target folder<br> * Development build, html page processing<br> * Development build, html page processing, inject references by searching directories<br> * Development build, html page processing, inject references by searching directories, injects js references<br> * Development build, html page processing, inject references by searching directories, injects css references<br> * Development build, LESS/SASS/etc files are linted, compiled<br> * Development build, JavaScript style checking<br> * Development build, JavaScript style checking, using jshint or jslint<br> * Development build, run unit tests<br> * Production build, script<br> * Production build, concatenation (aggregation, globbing, bundling) (If you add debug:true to your config/env/development.js the will not be <br>uglified)<br> * Production build, minification<br> * Production build, safe pre-minification, using ng-annotate<br> * Production build, uglification<br> * Production build, make static pages for SEO<br><b>Code Generation</b>:<br> * FEATURE (a.k.a. module, entity) generator (README.md<br>feature css<br>routes<br>controller<br>view<br>additional menu item)<br><b>Implemented Functionality</b>:<br> * 404 Page<br> * 500 Page<br> * Account Management<br> * Account Management, register/login/logout<br> * Account Management, is password manager friendly<br> * Front-end CRUD<br> * Full-stack CRUD<br> * Full-stack CRUD, with Read<br> * Full-stack CRUD, with Create, Update and Delete<br> * Google Analytics<br> * Menus system<br> * Realtime data sync<br> * Realtime data sync, using socket.io<br> * Styles, using Bootstrap<br><b>Performance</b>:<br> * Javascript performance thing<br> * Javascript performance thing, using lodash<br> * One event-loop thread handles all requests<br> * Configurable response caching (Express plugin<br><b>https</b>://www.npmjs.org/package/apicache)<br> * Clustered HTTP sessions<br><b>Security</b>:<br> * JavaScript obfuscation<br> * https<br> * Authentication, using Oauth<br> * Authentication, Basic (With Passport or others)<br> * Authentication, Digest (With Passport or others)<br> * Authentication, Token (With Passport or others)<br></td></tr></tbody></table>
Yeomanジェネレーターangular-fullstackについて誰も言及していないことに驚いています。これは最大のヨーマンコミュニティジェネレーターであり、現在、ジェネレーターページに 1490スターとMean.jsの81スターがあります(確かに、MEANJSの新しさを考えると、公平な比較ではありません)。私がこれを書いているとき、それは活発に維持されているようで、バージョン2.05です。MEANJSとは異なり、テンプレートにはSwigを使用しません。内蔵のパスポートで足場できます。