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:
- ember-browserify (si la biblioteca es compatible con CommonJS, lo que hace mathjs)
- "calzando" la biblioteca dependiente usted mismo
1. ember-browserify
Instalar ember-browserify
ember install ember-browserify
Instale la biblioteca CommonJS como un paquete de NPM
npm install --save-dev mathjs
Use el paquete de NPM con sintaxis de
import
regularimport 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:
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?