pods guide emberjs ember docs cli javascript ember.js ember-cli amd mathjs

javascript - guide - Importar dependencias en ember-cli(por ejemplo, importar math.js)



ember s proxy (1)

Es un poco molesto, pero como mathjs no expone / soporta un módulo AMD con nombre, no puede usar la sintaxis adicional en app.import .

Tienes dos opciones:

  1. ember-browserify (si la biblioteca es compatible con CommonJS, lo que hace mathjs)
  2. "calzando" la biblioteca dependiente usted mismo

1. ember-browserify

  1. Instalar ember-browserify

    ember install ember-browserify

  2. Instale la biblioteca CommonJS como un paquete de NPM

    npm install --save-dev mathjs

  3. Use el paquete de NPM con sintaxis de import regular

    import mathjs from ''npm:mathjs'';

2. Shimming

Lo que debe hacer es "calzar" la biblioteca para que esté disponible a través de declaraciones de import . Todavía no sé lo que significa la palabra shim <:

Si está interesado en crear un paquete ember-cli-mathjs-shim , por ejemplo, ember-cli-mathjs-shim , podría usarlo y darle a otros la capacidad de usarlo también. Algunos ejemplos de esto son:

ember-cli-shims

ember-cli-moment-shim

ember-cli-sockjs-shim

Pero si no se siente cómodo haciendo eso, le recomendaría agregar lo siguiente a su proyecto:

vendor/shims/math.js : vendor/shims/math.js una carpeta vendor/shims/math.js en el vendor (el proveedor es donde van sus dependencias que no provienen de NPM o Bower) y el archivo Brocfile no parece ser app.import con la app.import desde otro lugar que no sea aquí. - por ejemplo, app/shims o app/shims simples en el nivel raíz no funciona)

vendor/shims/math.js

(function() { /* globals define, math */ function mathJSModule() { ''use strict''; return { ''default'': math }; } define(''mathjs'', [], mathJSModule); })();

Brocfile.js

app.import(''bower_components/mathjs/dist/math.js''); app.import(''vendor/shims/math.js'', { exports: { ''mathjs'': [ ''default'' ] } });

El orden aquí es importante.

Estoy desconcertado sobre la importación de dependencias en ember-cli, especialmente sobre el caso estándar de AMD, como se menciona en el documento oficial de Ember Cli . El documento no proporciona muchos ejemplos, y me parece que supone que los lectores tienen un buen conocimiento sobre AMD, que no es el caso para mí. Mi caso de uso inmediato es importar math.js. Desafortunadamente, el documento oficial de math.js no proporciona ejemplos sobre la importación con Ember Cli. Luego, encontré esta publicación con ejemplos relativamente más claros, en particular, la siguiente parece bastante relevante.

app.import({ development: ''vendor/lodash/dist/lodash.js'', production: ''vendor/lodash/dist/lodash.min.js'' }, { ''lodash'': [ ''default'' ] });

Entonces, hice algo similar con math.js como a continuación:

app.import({ development: ''bower_components/mathjs/dist/math.js'', production: ''bower_components/mathjs/dist/math.min.js'' }, { ''mathjs'': [ ''default'' ] });

Sin embargo, no funciona. Cuando traté de usarlo con

import mathjs from ''mathjs''

Tengo un error Eventualmente, utilicé la siguiente solución:

// Brocfile.js app.import(''bower_components/mathjs/dist/math.min.js''); // some controller.js var math = window.math

Aunque la solución anterior funciona, no me gusta, ya que puede estar sujeto a conflictos de nombres. Además, según el documento de math.js, me parece que debería soportar el tipo estándar de importación de AMD.

Entonces, mis preguntas son las siguientes.
1. En el ejemplo de lodash arriba, ¿qué significa ''default'' ? ¿Es eso una referencia general a lo exportado en el módulo correspondiente? ¿Cómo puedo saber si puedo usarlo en general (por ejemplo, math.js)?
2. ¿Es cierto que si un módulo admite require.js, entonces es un módulo AMD estándar? Si es así, el código dado a continuación:

require.config({ paths: { mathjs: ''path/to/mathjs'', } }); require([''mathjs''], function (math) { // use math.js math.sqrt(-4); // 2i });

¿Cómo puedo asignarlo al código Ember Cli?