instalar con node.js ecmascript-6 bower js-amd es2015

node.js - con - install bower windows



bower init-diferencia entre amd, es6, globals y node (3)

Inicial

Estoy usando bower init por primera vez también.

Las opciones deben referirse a las diferentes formas de modularizar algunos códigos JavaScript:

  • amd: usando AMD define , como requirejs.
  • nodo: usando Node.js require .
  • globales: usando el patrón del módulo JavaScript para exponer una variable global (como window.JQuery).
  • es6: utilizando la próxima característica del módulo EcmaScript6.

En mi caso escribí un dflow módulo Node.js pero estoy usando browserify para crear un archivo dist / dflow.js que exporta una var de dflow global: así que seleccioné globales .

Otras actualizaciones

El comando que utilicé para examinar dflow como un objeto global de ventana era

browserify -s dflow -e index.js -o dist/dflow.js

Lo cambié porque prefiero usar requiere también dentro del navegador, así que ahora estoy usando

browserify -r ./index.js:dflow -o dist/dflow.js

y así cambié bower.moduleType a node en mi archivo bower.json .

La principal motivación fue que si el nombre de mi módulo tiene un guión, por ejemplo, la flow-view mi proyecto, debo camelizar el nombre global en flowView .

Este nuevo enfoque tiene otros dos beneficios:

  1. El nodo y la interfaz del navegador son los mismos. El uso de require tanto en el lado del cliente como en el del servidor, me permite escribir solo una vez los ejemplos de código y reutilizarlos fácilmente en ambos contextos.
  2. Utilizo los scripts npm y, por lo tanto, puedo aprovechar la variable ${npm_package_name} y escribir una vez el script que utilizo para buscar.

Este es otro tema, pero realmente vale la pena que considere la utilidad del último beneficio: permítame compartir el atributo npm.scripts.browserify que utilizo en mi package.json

"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"

Estoy creando mi primer componente Bower. Después de ejecutar bower init el script me pregunta ''¿qué tipos de módulos expone este paquete?'' con estas opciones:

  • amd
  • es6
  • globales
  • nodo

¿Cuál es la diferencia entre estas opciones?


Si no lo sabes, es muy probable que los globales sean la respuesta correcta para ti.

De cualquier manera, necesitas entender:

[ACTUALIZAR]

Esta característica se introdujo muy recientemente en Bower y aún no está documentada (AFAIK). Básicamente, describe el tipo de moduleType , que indica para qué tecnología de módulo se debe consumir el paquete (ver más arriba).

En este momento, no tiene ningún efecto aparte de establecer la propiedad moduleType en el archivo bower.json del paquete.

Consulte https://github.com/bower/bower/pull/934 para obtener la solicitud de extracción original.

[ACTUALIZACIÓN # 2]

Algunos puntos adicionales, para responder a los comentarios:

  • En este momento, AFAIK, no se realiza ninguna validación en la propiedad moduleType , lo que significa que las personas técnicamente pueden usar el valor que deseen para ello, incluidos los angularjs si se sienten inclinados a hacerlo.
  • El comité de Bower parece no estar interesado en la inclusión de nuevos non-interoperable/proprietary moduleTypes (piense en compositor, angular, etc.), lo cual es fácilmente comprensible, pero una vez más, nada realmente impide que las personas utilicen el valor de moduleType que desean.
  • una excepción a la anterior es la inclusión (algo) reciente del yui moduleType , por lo tanto, hay "excepciones" que se deben hacer, asumiendo que son parte de un plan concertado

¿Qué haría si tuviera que crear un paquete para un administrador de paquetes no listado y publicarlo en bower?

Sería autor de un módulo es6, y utilizaría / patch es6-transpiler para generar el formato del paquete que necesito. Entonces me gustaría / y:

  • pida a los chicos de la lista que incluyan la tecnología de mi paquete como una opción (basado en el hecho de que es6-transpiler como objetivo)
  • publicar mi paquete incluyendo tanto la versión del módulo es6 como la versión XXX transpilada del mismo, y usar es6 como un tipo de moduleType

Descargo de responsabilidad: no tengo experiencia en la vida real creando módulos angulares.


Solo como referencia, esto es precisamente lo que especifica Bower con respecto a los tipos de módulos:

El tipo de módulo definido en el archivo JavaScript main . Puede ser una o una matriz de las siguientes cadenas:

  • globals : módulo de JavaScript que se agrega al espacio de nombres global, usando window.namespace o la sintaxis de this.namespace
  • amd : módulo de JavaScript compatible con AMD, como RequireJS , utilizando la sintaxis define()
  • node : módulo de JavaScript compatible con el node y CommonJS usando la sintaxis de module.exports
  • es6 : módulo de JavaScript compatible con los módulos ECMAScript 6 , usando export sintaxis de export e import
  • yui : módulo de JavaScript compatible con los módulos YUI , utilizando la sintaxis YUI.add()

Enlace relevante: https://github.com/bower/spec/blob/master/json.md#moduletype