Export const z jednego skryptu do drugiego

0
import md5 from 'js-md5'

export default function gravatarUrl (size) {
  const email = Math.random().toString(36).substring(7) + '@gmail.com'
  return `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`
}
import gravatarUrl from '../gravatar-url'

const IMAGE_SIZE = 64
const EXTRA_ROWS = 5

export function createImages (window, numberOfImages) {
  return Array.apply(null, Array(numberOfImages)).map(() => gravatarImage(window))
}

export function gravatarImage (window) {
  const img = new window.Image()
  const email = gravatarUrl.email
  img.src = generateGravatarURL(IMAGE_SIZE)

  img.addEventListener('click', (e) => {
    e.target.classList.toggle('is-highlighted')
    window.alert(email);
  })

  return img
}

Próbuje w ten sposób pobrać const email z jednego skryptu i przekazać do drugiego, ale nie działa jak trzeba. Dopiero zaczynam swoją przygodę z JS... przejrzałem sporo w google i dalej nie wiem jak to rozwiązać. Pomoże ktoś

0

Z exportowanej funkcji gravatarUrl zwracaj nie tylko url, ale też email:

export default function gravatarUrl (size) {
    const email = Math.random().toString(36).substring(7) + '@gmail.com';
    return {
        url: `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`,
        email: email
    };
}

Prawdopodobnie trzeba będzie tej funkcji nadać jakąś lepszą nazwę.
Potem odwołujesz się do zwracanego obiektu:

let obj = gravatarUrl(costam);
console.log(obj.email);
console.log(obj.url);
0
złoty napisał(a):

Z exportowanej funkcji gravatarUrl zwracaj nie tylko url, ale też email:

export default function gravatarUrl (size) {
    const email = Math.random().toString(36).substring(7) + '@gmail.com';
    return {
        url: `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`,
        email: email
    };
}

Prawdopodobnie trzeba będzie tej funkcji nadać jakąś lepszą nazwę.
Potem odwołujesz się do zwracanego obiektu:

let obj = gravatarUrl(costam);
console.log(obj.email);
console.log(obj.url);

Sposób, który podałeś niestety rozwala mi reszte skryptu, nie działa jak trzeba, więc próbuje jeszcze inaczej jednak czegoś tu brakuje:

import {gravatarUrl as generateGravatarURL, emailexport as EmailExport} from '../gravatar-url'

const IMAGE_SIZE = 64
const EXTRA_ROWS = 5

export function createImages (window, numberOfImages) {
  return Array.apply(null, Array(numberOfImages)).map(() => gravatarImage(window))
}

export function gravatarImage (window) {
  const img = new window.Image()
  img.src = generateGravatarURL(IMAGE_SIZE)
  const email = EmailExport()

  img.addEventListener('click', (e) => {
    e.target.classList.toggle('is-highlighted')
    window.alert(email);
  })
import md5 from 'js-md5'

export function gravatarUrl (size) {
  const email = Math.random().toString(36).substring(7) + '@gmail.com'
  return `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`
}

export function emailexport(){
  return `${md5(email)}`
}```

bo dalej nie chce mi wyświetlić tego maila...
1

Możesz zrobić consta poza funkcją a potem wyeksportować osobno email i gravatarUrl

import md5 from 'js-md5'

const email = Math.random().toString(36).substring(7) + '@gmail.com';
const gravatarUrl = (size) => {
  return `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`
};

export { email, gravatarUrl };

Potem zaimportować to co chcesz w pliku

import { email, gravatarUrl } from '../gravatar-url'
0
lalarte napisał(a):

Możesz zrobić consta poza funkcją a potem wyeksportować osobno email i gravatarUrl

import md5 from 'js-md5'

const email = Math.random().toString(36).substring(7) + '@gmail.com';
const gravatarUrl = (size) => {
  return `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`
};

export { email, gravatarUrl };

Potem zaimportować to co chcesz w pliku

import { email, gravatarUrl } from '../gravatar-url'

Teraz faktycznie działa export email, jednak jest inny problem. Ta funkcja generowała losowo obrazki dla każdego maila/avatara, jak tu:
screenshot-20200527133517.png

a gdy zastosowałem twoją funkcje to generowanie przestało działać i teraz jest powielony tylko jeden avatar
screenshot-20200527133658.png

Najwyraźniej funkcja nie bierze pod uwagę "size" z gravatarUrl. Co mogę zrobić żeby to naprawić?

1
ProExCurator napisał(a):

a gdy zastosowałem twoją funkcje to generowanie przestało działać i teraz jest powielony tylko jeden avatar
Najwyraźniej funkcja nie bierze pod uwagę "size" z gravatarUrl. Co mogę zrobić żeby to naprawić?

Bierze pod uwagę size, natomiast email jest generowany tylko raz w tym module i przypisany do stałej - stąd jeden powielony gravatar.
Nie rozumiem do końca co konkretnie chcesz uzyskać - gdybyś wrzucił więcej kodu, byłoby łatwiej to wydedukować.
Z tego co zauważyłem to chcesz otrzymać gravatarUrl i odpowiadający mu email. Nie jesteś w stanie z samego gravatarUrla odzyskać email - jest zahashowany przez MD5. Logicznym rozwiązaniem jest zwracanie jednego i drugiego z funkcji - napisz, co konkretnie nie działa po wprowadzeniu takiej zmiany to może uda się coś pomóc.

0
złoty napisał(a):
ProExCurator napisał(a):

a gdy zastosowałem twoją funkcje to generowanie przestało działać i teraz jest powielony tylko jeden avatar
Najwyraźniej funkcja nie bierze pod uwagę "size" z gravatarUrl. Co mogę zrobić żeby to naprawić?

Bierze pod uwagę size, natomiast email jest generowany tylko raz w tym module i przypisany do stałej - stąd jeden powielony gravatar.
Nie rozumiem do końca co konkretnie chcesz uzyskać - gdybyś wrzucił więcej kodu, byłoby łatwiej to wydedukować.
Z tego co zauważyłem to chcesz otrzymać gravatarUrl i odpowiadający mu email. Nie jesteś w stanie z samego gravatarUrla odzyskać email - jest zahashowany przez MD5. Logicznym rozwiązaniem jest zwracanie jednego i drugiego z funkcji - napisz, co konkretnie nie działa po wprowadzeniu takiej zmiany to może uda się coś pomóc.

Faktycznie ma to sens teraz. To co chce osiągnąć to aby nadal generowany były losowo avatary i dla każdego z nich mail, który potem mógłbym wyświetlić poprzez np.

window.alert(email);

to w zasadzie główny efekt o który mi chodzi, żeby można było w jakiś sposób go wyświetlić po kliknięciu w dany avatar.

1
export default function gravatarUrl (size) {
    const email = Math.random().toString(36).substring(7) + '@gmail.com';
    return {
        url: `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`,
        email: email
    };
}
import gravatarUrl from './gravatar-url.js';

const IMAGE_SIZE = 64
const EXTRA_ROWS = 5

export function createImages (window, numberOfImages) {
  return Array.apply(null, Array(numberOfImages)).map(() => gravatarImage(window))
}

export function gravatarImage (window) {
  const img = new window.Image()
  const gravatarInfo = gravatarUrl(IMAGE_SIZE);
  img.src = gravatarInfo.url;

  img.addEventListener('click', (e) => {
    e.target.classList.toggle('is-highlighted')
    window.alert(gravatarInfo.email);
  })
0
złoty napisał(a):
export default function gravatarUrl (size) {
    const email = Math.random().toString(36).substring(7) + '@gmail.com';
    return {
        url: `http://www.gravatar.com/avatar/${md5(email)}?d=identicon&s=${size}`,
        email: email
    };
}
import {gravatarUrl as generateGravatarURL, emailexport as EmailExport} from '../gravatar-url'

const IMAGE_SIZE = 64
const EXTRA_ROWS = 5

export function createImages (window, numberOfImages) {
  return Array.apply(null, Array(numberOfImages)).map(() => gravatarImage(window))
}

export function gravatarImage (window) {
  const img = new window.Image()
  const gravatarInfo = generateGravatarURL(IMAGE_SIZE);
  img.src = gravatarInfo.url;
  const email = EmailExport()

  img.addEventListener('click', (e) => {
    e.target.classList.toggle('is-highlighted')
    window.alert(gravatarInfo.email);
  })

To wygląda na dobre rozwiązanie, ale z jakiegoś powodu wywala mi ostrzeżenia:

WARNING in ./lib/ui/gravatars.js 16:14-25
"export 'email' (imported as 'EmailExport') was not found in '../gravatar-url'
@ ./lib/ui/index.js
@ ./lib/app.js
@ ./main.js

WARNING in ./lib/ui/gravatars.js 14:21-40
"export 'gravatarUrl' (imported as 'generateGravatarURL') was not found in '../gravatar-url'
@ ./lib/ui/index.js
@ ./lib/app.js
@ ./main.js

EDIT: Dzięki bardzo @złoty, teraz działa wszystko jak miało należy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1