SlideShare una empresa de Scribd logo
1 de 131
Descargar para leer sin conexión
Dependency management
&
Package management
in JavaScript
Sebastiano Armeli
@sebarmeli
WebExpo 2013, Prague (Czech Republic)
Friday, September 20, 13
Friday, September 20, 13
@sebarmeli
Sebastiano Armeli-Battana
• realestate.com.au
• Melbourne, Australia
Friday, September 20, 13
Dependency management
&
Package management
in JavaScript
Sebastiano Armeli
@sebarmeli
WebExpo 2013, Prague (Czech Republic)
Friday, September 20, 13
Dependency
management
Friday, September 20, 13
“A dependency
happens when a
component relies on
another one”
Friday, September 20, 13
View
<< depends on >>
Model
Friday, September 20, 13
model.js
------------
(function(window){
‘use strict’;
function Model() { }
window.Model = Model;
})(window);
Friday, September 20, 13
view.js
------------
(function(window){
‘use strict’;
function View(model) {
this.model = model;
}
window.View = View;
})(window);
Friday, September 20, 13
var model = new Model();
var view = new View(model);
Friday, September 20, 13
What to
consider when
you create
a dependency?
Friday, September 20, 13
Principles of
Package Coupling
Acyclic-Dependencies
Principle
Stable-Dependencies
Principle
Friday, September 20, 13
Stable
Dependencies
Principle
Friday, September 20, 13
Friday, September 20, 13
Unstable
Stable
View
Model
Friday, September 20, 13
Model DOES NOT change
frequently
View DOES change
frequently
Friday, September 20, 13
Acyclic
Dependencies
Principle
Friday, September 20, 13
Friday, September 20, 13
View
ModelRouter
Friday, September 20, 13
Avoid Cycles!
Friday, September 20, 13
How do we
handle
dependencies?
Friday, September 20, 13
Java
-----
import java.util.*;
import javax.servlet.http.*;
Ruby
-----
require ‘net/http’
require ‘spec_helper’
Friday, September 20, 13
...and in JS ?
Friday, September 20, 13
import jQuery from ‘jquery’;
Friday, September 20, 13
import jQuery from ‘jquery’;
ES6
Friday, September 20, 13
<script src=”file1.js”></script>
<script src=”file2.js”></script>
<script src=”file3.js”></script>
<script src=”file4.js”></script>
<script src=”file5.js”></script>
<script src=”file6.js”></script>
<script src=”file7.js”></script>
<script src=”file8.js”></script>
index.html
------------
Friday, September 20, 13
<script src=”file3.js”></script>
<script src=”file4.js”></script>
<script src=”file1.js”></script>
<script src=”file2.js”></script>
index.html
------------
<script src=”file5.js”></script>
<script src=”file6.js”></script>
<script src=”file7.js”></script>
<script src=”file8.js”></script>
Friday, September 20, 13
<script src=”file3.js”></script>
<script src=”file4.js”></script>
<script src=”file1.js”></script>
<script src=”file2.js”></script>
index.html
------------
<script src=”file5.js”></script>
<script src=”file6.js”></script>
<script src=”file7.js”></script>
<script src=”file8.js”></script>
Friday, September 20, 13
<script src=”file4.js”></script>
<script src=”file3.js”></script>
<script src=”file1.js”></script>
<script src=”file2.js”></script>
index.html
------------
<script src=”file5.js”></script>
<script src=”file6.js”></script>
<script src=”file7.js”></script>
<script src=”file8.js”></script>
Friday, September 20, 13
Friday, September 20, 13
Not only one
way to order
<script>s
Friday, September 20, 13
app.js view.js
helpers.jsview2.js
helpers2.js
model.js
Friday, September 20, 13
app.js view.js
helpers.jsview2.js
helpers2.js
model.js
1
2
3
5
4
6
Friday, September 20, 13
app.js view.js
helpers.jsview2.js
helpers2.js
model.js
1
2
3
5
4
6
4
1
3
2
5
6
Friday, September 20, 13
1
4
5
2
3
0 1
1 2,3
2 5
3 4
IN-DEGREES NODE
Friday, September 20, 13
4
5
2
3
0 2,3
2 5
3 4
IN-DEGREES NODE
1
Results:
Friday, September 20, 13
4
5
2
0 2
1 5
2 4
IN-DEGREES NODE
1 - 3
Results:
Friday, September 20, 13
4
5
0 5
1 4
IN-DEGREES NODE
1 - 3 - 2
Results:
Friday, September 20, 13
4
0 4
IN-DEGREES NODE
1 - 3 - 2 - 5
Results:
Friday, September 20, 13
1
4
5
2
3
1 - 3 - 2 - 5 - 4
4 - 5 - 2 - 3 - 1
Friday, September 20, 13
http://howardlewisship.com/images/t5-service-dependencies.jpg
Friday, September 20, 13
RequireJS
Friday, September 20, 13
Friday, September 20, 13
var module = (function(){
// private variables, methods
var title = “”;
function f1() {}
return {
// public/privileged methods
getTitle: function(){
return title;
}
}
}()) ;
MODULE PATTERN
Friday, September 20, 13
define(function () {
var title = “”;
function f1() {}
return {
getTitle: function() {
return title;
}
}
});
RJS MODULE PATTERN
Friday, September 20, 13
define(id?, dependencies?, factory)
Friday, September 20, 13
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
view1.js
------------
define([‘helpers’],
function(helpers){
return {
init: function(){}
}
});
define(function(){
// code here
});
helpers.js
------------
Friday, September 20, 13
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
view1.js
------------
define([‘helpers’],
function(helpers){
return {
init: function(){}
}
});
define(function(){
// code here
});
helpers.js
------------
Friday, September 20, 13
require(dependencies?, factory)
Friday, September 20, 13
index.html
------------
<script src=”js/vendor/require.js”
data-main=”js/main.js”></script>
main.js
------------
require([‘view1’],function(view1){
view1.init();
});
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
Friday, September 20, 13
Friday, September 20, 13
main.js
------------
require.config({
baseUrl: ‘./js’,
paths: {
‘view1’: ‘app/views/view1’
}
});
require([‘view1’],function(view1){
view1.init();
});
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
Friday, September 20, 13
NO blocking!
Friday, September 20, 13
require() asynchronous
de!ne() - de!ne.amd
AMD
well suited for browser
Friday, September 20, 13
Friday, September 20, 13
Friday, September 20, 13
if ( typeof define === "function" &&
define.amd ) {
define( "jquery", [], function () {
return jQuery;
});
}
Friday, September 20, 13
Friday, September 20, 13
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
-- backbone.js
-- underscore.js
-- jquery.js
main.js
------------
require.config({
baseUrl: ‘js/vendor’,
shim: {
‘underscore’:{
exports: ‘_’
},
‘backbone’: {
deps: [‘jquery’, ‘underscore’],
exports: ‘Backbone’
}
}
});
require([‘backbone’],function(Backbone){
Backbone.history.start();
});
Friday, September 20, 13
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
-- backbone.js
-- underscore.js
-- jquery.js
main.js
------------
require.config({
baseUrl: ‘js/vendor’,
shim: {
‘underscore’:{
exports: ‘_’
},
‘backbone’: {
deps: [‘jquery’, ‘underscore’],
exports: ‘Backbone’
}
}
});
require([‘backbone’],function(Backbone){
Backbone.history.start();
});
Friday, September 20, 13
LOADER PLUGINS
• i18n!, async!, domReady!
• text!, css!, json!, cs!, hbs!
[plugin Module ID]![resource ID]
Friday, September 20, 13
main.js
------------
require.config({
baseUrl: ‘./js’
});
require([‘text!partials/file.txt’],
function(txt) {
// txt goes here
});
index.html
js /
-- main.js
-- vendor /
-- require.js
-- text.js
-- partials /
-- !le.txt
Friday, September 20, 13
Friday, September 20, 13
3 requests!
Friday, September 20, 13
r.js
npm install -g requirejs
OPTIMIZER
Friday, September 20, 13
r.js -o tools/build.js
Friday, September 20, 13
build.js
------------
({
appDir:'../',
mainConfigFile: '../js/main.js',
dir: "../build",
modules: [
{
name: "../main"
}
]
})
index.html
js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
tools /
-- build.js
Friday, September 20, 13
build/js/main.js
----------------
index.html
build /
-- index.html
-- build.txt
-- js /
-- main.js
-- helpers.js
-- app /
-- views /
-- view1.js
-- vendor /
-- require.js
-- tools /
-- build.js
js/vendor/../main.js
----------------
js/helpers.js
js/vendor/view1.js
js/vendor/../main.js
build/build.txt
----------------
Friday, September 20, 13
OPTIMIZER
1 request!
Friday, September 20, 13
Friday, September 20, 13
exports.render = function() {};
var module = require(‘view1’);
NO de!ne()
require() synchronous
Server-side approach
Friday, September 20, 13
npm install -g browserify
Friday, September 20, 13
foo.js
------------
index.html
js /
-- main.js
-- foo.js
node_modules /
package.json
var Foo = function() {
// do something
};
module.exports = Foo;
main.js
------------
var Foo = require(‘./foo’);
var foo = new Foo();
Friday, September 20, 13
browserify js/main.js > js/bundle.js
Friday, September 20, 13
index.html
------------
index.html
js /
-- main.js
-- foo.js
-- bundle.js
node_modules /
package.json
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);throw new Error("Cannot find
module '"+o+"'")}var f=n[o]={exports:{}};t[o]
[0].call(f.exports,function(e){var n=t[o][1][e];return
s(n?n:e)},f,f.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 Foo = function(){
console.log("AA");
};
module.exports = Foo;
},{}],2:[function(require,module,exports){
var Foo = require('./foo');
var foo = new Foo();
},{"./foo":1}]},{},[2])
<script src=”js/bundle.js”>
</script>
Friday, September 20, 13
Package
management
Friday, September 20, 13
Friday, September 20, 13
“A package is a
specific piece of
software installable”
Friday, September 20, 13
Packages
One or more modules
Friday, September 20, 13
Name, Description, Version
Metadata
Packages
One or more modules
Friday, September 20, 13
Name, Description, Version
Metadata
Packages
One or more modules
Checksum
Friday, September 20, 13
Name, Description, Version
Metadata
Packages
One or more modules
Checksum
Dependencies
Friday, September 20, 13
Package Manager
is the TOOL to...
Friday, September 20, 13
Speed up your development work"ow
Friday, September 20, 13
Speed up your development work"ow
Automate common tasks
Friday, September 20, 13
Speed up your development work"ow
Automate common tasks
DRY with Repository / Registry
Friday, September 20, 13
Common Operations
Friday, September 20, 13
Installing
Friday, September 20, 13
Installing
Removing
Friday, September 20, 13
Installing
Removing
Searching
Friday, September 20, 13
Installing
Removing
Searching
Upgrading
Friday, September 20, 13
Installing
Removing
Searching
Upgrading
Publishing
Friday, September 20, 13
Package Depedencies
A
B
C
C
Friday, September 20, 13
Package Depedencies
A
B
C
C
=1.1.0
>1.2.0
Friday, September 20, 13
Package Depedencies
A
B
C
C
=1.1.0
>1.2.0
Which version
should I
download?
Friday, September 20, 13
Java Ruby Python .Net OSX Linux
Maven/Gradle Rubygems pip NuGet Homebrew yum/apt
Friday, September 20, 13
How do you
install packages
in JS ?
Friday, September 20, 13
Friday, September 20, 13
Node.js
Friday, September 20, 13
package.json
Node.js
Friday, September 20, 13
package.json
NPM registry
Node.js
Friday, September 20, 13
package.json
------------
{
"name": "my-app",
"version": "0.0.1",
"dependencies": {
"jquery": "~2.0"
},
"devDependencies": {
"qunit": "0.5.x"
}
}
index.html
package.json
js /
-- app.js
Friday, September 20, 13
npm install
Friday, September 20, 13
npm install <package>
Commands
Friday, September 20, 13
npm install <package>
Commands
npm install -g <package>
Friday, September 20, 13
npm install <package>
Commands
npm install -g <package>
npm update <package>
Friday, September 20, 13
npm list
Commands
Friday, September 20, 13
npm list
Commands
npm uninstall <package>
Friday, September 20, 13
npm list
Commands
npm uninstall <package>
npm publish <tarball>
Friday, September 20, 13
is a not Package Manager
for the CLIENT
Friday, September 20, 13
Bower
Friday, September 20, 13
Bower
Minimalistic & Agnostic
Friday, September 20, 13
Bower
Minimalistic & Agnostic
HTML/CSS/JS
Friday, September 20, 13
Bower
Minimalistic & Agnostic
HTML/CSS/JS
AMD/CommonJS/ES6 modules
Friday, September 20, 13
npm install -g bower
Friday, September 20, 13
bower.json
------------
{
"name": "my-app",
"version": "0.0.1",
"ignore": [
"build",
"Gruntfile.js",
"package.json",
"bower.json"
],
"main": ["js/app.js"],
"dependencies": {
"requirejs": "~2.1.8", // >=2.1.8 < 2.2.0
"jquery": "~2.0" // >=2.0.0 < 2.1.0
},
"devDependencies": {
"qunit": "^1.12.0" // >=1.12.0 < 2.0.0
}
}
index.html
bower.json
js /
-- app.js
Friday, September 20, 13
bower install
Friday, September 20, 13
.bowerrc
------------
{
"directory”: “js/vendor”,
“json”: “bower.json”
}
index.html
bower.json
.bowerrc
js /
-- app.js
-- vendor/
-- jquery/
-- jquery.js
-- requirejs/
-- require.js
index.html
------------
<script src=”js/vendor/jquery/jquery.js >
</script>
Friday, September 20, 13
bower install jquery#1.8.2
Git tagAlias from registry
Friday, September 20, 13
bower install jquery --save
Friday, September 20, 13
bower install git://github.com/jquery/jquery.git#1.8.3
bower install ../my-package
Git endpoint + Git tag
Local package
bower install https://github.com/jquery/jquery.git
Git endpoint
Friday, September 20, 13
bower list
my-package
├── jquery#2.0.3
└── requirejs#2.1.8
Friday, September 20, 13
bower list
my-package
├── jquery#1.8.2 incompatible with ~2.0.0 (2.0.3 available)
└── requirejs#2.1.8
my-package
├── jquery#2.0.3
└── requirejs#2.1.8
Friday, September 20, 13
bower update jquery
bower uninstall jquery
bower info jquery
Friday, September 20, 13
bower register <package> <git_endpoint>
Friday, September 20, 13
Friday, September 20, 13
file1.js
-----------
require([‘module2’], function(){
// <use> <module2>;
});
Dependency management
Friday, September 20, 13
file1.js
-----------
var module2 = require(‘module2’);
// use module2
Dependency management
Friday, September 20, 13
source_file
-----------
<import> <module2>;
// <use> <module2>;
$ bower install jquery
Package management
Friday, September 20, 13
source_file
-----------
<import> <module2>;
// <use> <module2>;
$ npm install jquery
Package management
Friday, September 20, 13
http://requirejs.com
http://bower.io/
@sebarmeli
https://github.com/amdjs/amdjs-api/wiki/AMD
https://npmjs.org/
WebExpo 2013, Prague (Czech Republic)
Friday, September 20, 13

Más contenido relacionado

La actualidad más candente

Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014John Hann
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todaygerbille
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0Takuya Tejima
 
Professional web development with libraries
Professional web development with librariesProfessional web development with libraries
Professional web development with librariesChristian Heilmann
 
YUI introduction to build hack interfaces
YUI introduction to build hack interfacesYUI introduction to build hack interfaces
YUI introduction to build hack interfacesChristian Heilmann
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorialClaude Tech
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoJavier Abadía
 
An Event Apart Boston: Principles of Unobtrusive JavaScript
An Event Apart Boston: Principles of Unobtrusive JavaScriptAn Event Apart Boston: Principles of Unobtrusive JavaScript
An Event Apart Boston: Principles of Unobtrusive JavaScriptPeter-Paul Koch
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explainedRamesh BN
 
2009 Hackday Taiwan Yui
2009 Hackday Taiwan Yui2009 Hackday Taiwan Yui
2009 Hackday Taiwan YuiJH Lee
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdevFrank Rousseau
 

La actualidad más candente (16)

Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
 
jQuery: Events, Animation, Ajax
jQuery: Events, Animation, AjaxjQuery: Events, Animation, Ajax
jQuery: Events, Animation, Ajax
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0
 
Professional web development with libraries
Professional web development with librariesProfessional web development with libraries
Professional web development with libraries
 
Android swedroid
Android swedroidAndroid swedroid
Android swedroid
 
YUI introduction to build hack interfaces
YUI introduction to build hack interfacesYUI introduction to build hack interfaces
YUI introduction to build hack interfaces
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorial
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar Django
 
Sane Async Patterns
Sane Async PatternsSane Async Patterns
Sane Async Patterns
 
An Event Apart Boston: Principles of Unobtrusive JavaScript
An Event Apart Boston: Principles of Unobtrusive JavaScriptAn Event Apart Boston: Principles of Unobtrusive JavaScript
An Event Apart Boston: Principles of Unobtrusive JavaScript
 
DrupalCon jQuery
DrupalCon jQueryDrupalCon jQuery
DrupalCon jQuery
 
YUI 3
YUI 3YUI 3
YUI 3
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explained
 
2009 Hackday Taiwan Yui
2009 Hackday Taiwan Yui2009 Hackday Taiwan Yui
2009 Hackday Taiwan Yui
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 

Destacado

Space as Service
Space as Service Space as Service
Space as Service TAPintoIT
 
Timothy Musila
Timothy MusilaTimothy Musila
Timothy MusilaNjueMoses
 
Going mobile talk 2013 04 25
Going mobile talk 2013 04 25Going mobile talk 2013 04 25
Going mobile talk 2013 04 25TAPintoIT
 
eReading talk SJSU 2012 01
eReading talk SJSU 2012 01eReading talk SJSU 2012 01
eReading talk SJSU 2012 01TAPintoIT
 
26 Smirks: eReading and Libraries
26 Smirks:  eReading and Libraries26 Smirks:  eReading and Libraries
26 Smirks: eReading and LibrariesTAPintoIT
 
Sunde vaner begynder med sunde valg
Sunde vaner begynder med sunde valgSunde vaner begynder med sunde valg
Sunde vaner begynder med sunde valgPulsslag
 
Kanawha talk 2011 02
Kanawha talk 2011 02Kanawha talk 2011 02
Kanawha talk 2011 02TAPintoIT
 
在巴黎设置旗舰店须知 2011——1
在巴黎设置旗舰店须知 2011——1在巴黎设置旗舰店须知 2011——1
在巴黎设置旗舰店须知 2011——1Myrachan
 
Ala pr forum talk peters 2012 06e
Ala pr forum talk peters 2012 06eAla pr forum talk peters 2012 06e
Ala pr forum talk peters 2012 06eTAPintoIT
 
Primeros pasos con twitter bootstrap
Primeros pasos con twitter bootstrapPrimeros pasos con twitter bootstrap
Primeros pasos con twitter bootstrapJorge Cuadrado
 
Rich idiot’s upside down action plan: What I learned from the book
Rich idiot’s upside down action plan:  What I learned from the bookRich idiot’s upside down action plan:  What I learned from the book
Rich idiot’s upside down action plan: What I learned from the bookCarey Radican
 
öğRenciler e twinning te neler yapabilir
öğRenciler e twinning te neler yapabiliröğRenciler e twinning te neler yapabilir
öğRenciler e twinning te neler yapabilirOnur Kalafat
 

Destacado (20)

Dilemma 6
Dilemma 6Dilemma 6
Dilemma 6
 
Space as Service
Space as Service Space as Service
Space as Service
 
Nihonggo
NihonggoNihonggo
Nihonggo
 
Timothy Musila
Timothy MusilaTimothy Musila
Timothy Musila
 
Going mobile talk 2013 04 25
Going mobile talk 2013 04 25Going mobile talk 2013 04 25
Going mobile talk 2013 04 25
 
Enforcing coding standards
Enforcing coding standardsEnforcing coding standards
Enforcing coding standards
 
La tertulia 1995 2015 b
La tertulia 1995 2015 bLa tertulia 1995 2015 b
La tertulia 1995 2015 b
 
eReading talk SJSU 2012 01
eReading talk SJSU 2012 01eReading talk SJSU 2012 01
eReading talk SJSU 2012 01
 
Fruit
FruitFruit
Fruit
 
Drinks
DrinksDrinks
Drinks
 
26 Smirks: eReading and Libraries
26 Smirks:  eReading and Libraries26 Smirks:  eReading and Libraries
26 Smirks: eReading and Libraries
 
Idioms
IdiomsIdioms
Idioms
 
Puppymill paper
Puppymill paperPuppymill paper
Puppymill paper
 
Sunde vaner begynder med sunde valg
Sunde vaner begynder med sunde valgSunde vaner begynder med sunde valg
Sunde vaner begynder med sunde valg
 
Kanawha talk 2011 02
Kanawha talk 2011 02Kanawha talk 2011 02
Kanawha talk 2011 02
 
在巴黎设置旗舰店须知 2011——1
在巴黎设置旗舰店须知 2011——1在巴黎设置旗舰店须知 2011——1
在巴黎设置旗舰店须知 2011——1
 
Ala pr forum talk peters 2012 06e
Ala pr forum talk peters 2012 06eAla pr forum talk peters 2012 06e
Ala pr forum talk peters 2012 06e
 
Primeros pasos con twitter bootstrap
Primeros pasos con twitter bootstrapPrimeros pasos con twitter bootstrap
Primeros pasos con twitter bootstrap
 
Rich idiot’s upside down action plan: What I learned from the book
Rich idiot’s upside down action plan:  What I learned from the bookRich idiot’s upside down action plan:  What I learned from the book
Rich idiot’s upside down action plan: What I learned from the book
 
öğRenciler e twinning te neler yapabilir
öğRenciler e twinning te neler yapabiliröğRenciler e twinning te neler yapabilir
öğRenciler e twinning te neler yapabilir
 

Similar a Dependency management & Package management in JavaScript

Pragmatic JavaScript
Pragmatic JavaScriptPragmatic JavaScript
Pragmatic JavaScriptJohn Hann
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsAlvaro Videla
 
Webapplikationen mit Backbone.js
Webapplikationen mit Backbone.jsWebapplikationen mit Backbone.js
Webapplikationen mit Backbone.jsSebastian Springer
 
JavaScript Makers: How JS is Helping Drive the Maker Movement
JavaScript Makers: How JS is Helping Drive the Maker MovementJavaScript Makers: How JS is Helping Drive the Maker Movement
JavaScript Makers: How JS is Helping Drive the Maker MovementJesse Cravens
 
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsMeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsSimo Ahava
 
Intro to Ember.js
Intro to Ember.jsIntro to Ember.js
Intro to Ember.jsJay Phelps
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in EmberMatthew Beale
 
Rails 6 frontend frameworks
Rails 6 frontend frameworksRails 6 frontend frameworks
Rails 6 frontend frameworksEric Guo
 
Building a Startup Stack with AngularJS
Building a Startup Stack with AngularJSBuilding a Startup Stack with AngularJS
Building a Startup Stack with AngularJSFITC
 
CDI do básico ao avançado
CDI do básico ao avançadoCDI do básico ao avançado
CDI do básico ao avançadoAlberto Souza
 
Securing Client Side Data
 Securing Client Side Data Securing Client Side Data
Securing Client Side DataGrgur Grisogono
 
BlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorksBlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorksmwbrooks
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
Zeno rocha - HTML5 APIs para Mobile
Zeno rocha - HTML5 APIs para MobileZeno rocha - HTML5 APIs para Mobile
Zeno rocha - HTML5 APIs para MobileiMasters
 
Loadrunner
LoadrunnerLoadrunner
Loadrunnerdanwrong
 
Fórum de Software Livre do Serpro RJ 2009
Fórum de Software Livre do Serpro RJ 2009Fórum de Software Livre do Serpro RJ 2009
Fórum de Software Livre do Serpro RJ 2009Fabio Akita
 
Great Developers Steal
Great Developers StealGreat Developers Steal
Great Developers StealBen Scofield
 

Similar a Dependency management & Package management in JavaScript (20)

Pragmatic JavaScript
Pragmatic JavaScriptPragmatic JavaScript
Pragmatic JavaScript
 
Introduction to Scrum version 3.1
Introduction to Scrum version 3.1Introduction to Scrum version 3.1
Introduction to Scrum version 3.1
 
Backbone
BackboneBackbone
Backbone
 
Einführung in AngularJS
Einführung in AngularJSEinführung in AngularJS
Einführung in AngularJS
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal Labs
 
Webapplikationen mit Backbone.js
Webapplikationen mit Backbone.jsWebapplikationen mit Backbone.js
Webapplikationen mit Backbone.js
 
JavaScript Makers: How JS is Helping Drive the Maker Movement
JavaScript Makers: How JS is Helping Drive the Maker MovementJavaScript Makers: How JS is Helping Drive the Maker Movement
JavaScript Makers: How JS is Helping Drive the Maker Movement
 
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analystsMeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
MeasureCamp IX (London) - 10 JavaScript Concepts for web analysts
 
Intro to Ember.js
Intro to Ember.jsIntro to Ember.js
Intro to Ember.js
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in Ember
 
Rails 6 frontend frameworks
Rails 6 frontend frameworksRails 6 frontend frameworks
Rails 6 frontend frameworks
 
Building a Startup Stack with AngularJS
Building a Startup Stack with AngularJSBuilding a Startup Stack with AngularJS
Building a Startup Stack with AngularJS
 
CDI do básico ao avançado
CDI do básico ao avançadoCDI do básico ao avançado
CDI do básico ao avançado
 
Securing Client Side Data
 Securing Client Side Data Securing Client Side Data
Securing Client Side Data
 
BlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorksBlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorks
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Zeno rocha - HTML5 APIs para Mobile
Zeno rocha - HTML5 APIs para MobileZeno rocha - HTML5 APIs para Mobile
Zeno rocha - HTML5 APIs para Mobile
 
Loadrunner
LoadrunnerLoadrunner
Loadrunner
 
Fórum de Software Livre do Serpro RJ 2009
Fórum de Software Livre do Serpro RJ 2009Fórum de Software Livre do Serpro RJ 2009
Fórum de Software Livre do Serpro RJ 2009
 
Great Developers Steal
Great Developers StealGreat Developers Steal
Great Developers Steal
 

Más de Sebastiano Armeli

Más de Sebastiano Armeli (11)

Managing a software engineering team
Managing a software engineering teamManaging a software engineering team
Managing a software engineering team
 
Enforcing coding standards in a JS project
Enforcing coding standards in a JS projectEnforcing coding standards in a JS project
Enforcing coding standards in a JS project
 
ES6: The future is now
ES6: The future is nowES6: The future is now
ES6: The future is now
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is here
 
Karma - JS Test Runner
Karma - JS Test RunnerKarma - JS Test Runner
Karma - JS Test Runner
 
RequireJS
RequireJSRequireJS
RequireJS
 
Lazy load Everything!
Lazy load Everything!Lazy load Everything!
Lazy load Everything!
 
MVC on the server and on the client
MVC on the server and on the clientMVC on the server and on the client
MVC on the server and on the client
 
Backbone.js in a real-life application
Backbone.js in a real-life applicationBackbone.js in a real-life application
Backbone.js in a real-life application
 
Getting started with Selenium 2
Getting started with Selenium 2Getting started with Selenium 2
Getting started with Selenium 2
 
Web Storage
Web StorageWeb Storage
Web Storage
 

Último

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 

Último (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

Dependency management & Package management in JavaScript