Dieses Plugin funktioniert nicht mit einem Plugin, das eine async/await-Syntax enthält, die durch ein Objekt-Hash-Problem und tscache.ts verursacht wird . Ich denke, dies ist schwer zu beheben, da es jetzt keine Möglichkeit gibt, eine asynchrone Funktion zu erkennen. Gibt es also eine Alternative ohne Objekt-Hash?
import svgr from '@svgr/rollup';
import typescript from 'rollup-plugin-typescript2';
export default {
...
plugins: [
replace({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }),
svgr(),
typescript({
useTsconfigDeclarationDir: true,
})
],
...
};
Nicht relevant.
Nicht relevant.
[!] (rpt2 plugin) Error: Unknown object type "asyncfunction"
src/components/atoms/Icon/index.ts
Error: Unknown object type "asyncfunction"
at Object._object (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:218:17)
at Object._function (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:319:14)
at Object.dispatch (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:185:30)
at /Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:246:18
at Array.forEach (<anonymous>)
at Object._object (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:242:21)
at Object.dispatch (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:185:30)
at /Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:260:23
at Array.forEach (<anonymous>)
at Object._array (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:259:20)
Ich habe eine Problemumgehung hinzugefügt, um alles zu ignorieren, was Objekt-Hash nicht verarbeiten kann (siehe Objekthash-Zweig, Option objectHashIgnoreUnknownHack
). Dies kann den Cache jedoch möglicherweise veraltet machen, also keine gute langfristige Lösung.
@wessberg
Ich muss zugeben, dass ich überrascht bin, dass dies bisher kein größeres Problem war, da asynchrone Funktionen inzwischen sehr verbreitet sind 😀. Deshalb denke ich auch, dass das einfache Ignorieren zu vielen Cache-Problemen führen wird. Die PR, die ich vor einiger Zeit bei object-hash eingereicht habe, war eine Folge genau dieses Problems, und ich würde vorschlagen, dass Sie die Abhängigkeit von Object-Hash entfernen. Ich bin mir ziemlich sicher, dass der vor einiger Zeit eingereichte PR gut funktionieren würde, da er mit dem gleichen Wert übereinstimmt, der in der Fehlermeldung angegeben ist, und beide Komponententests bestanden und die Probleme in diesem Plugin gelöst hat. Verlassen Sie sich also auf den PR anstelle des NPM-Pakets hier.
@vwxyutarooo , eine sofortige clean: true
in der Konfiguration festzulegen , um den Cache vollständig zu umgehen. Alternativ (sorry für den Stecker) habe ich https://github.com/wessberg/rollup-plugin-ts gebaut, was auch gut funktioniert
@wessberg Ja, ich denke, noch nicht viele Rollup-Plugins haben Async in ihrer Benutzeroberfläche.
Kennen Sie eine bessere Methode zum Hashing von Objekten? Ich muss einen Cache-Schlüssel erstellen, der teilweise auf dem Rollup-Konfigurationsobjekt basiert (und daher die Quelle aller verwendeten Plugins enthält), der beim Start übergeben wird.
Übrigens, um das zu verdeutlichen - das Problem gilt für asynchrone Dinge in der Rollup-Konfiguration selbst. Async im transpilierten Code ist kein Problem, da Code basierend auf Quelltext gehasht wird.
Hmm, nun, Sie könnten sha1 auf das Ergebnis von JSON.stringify'ing der gesamten Konfiguration mit einem benutzerdefinierten Ersetzer anwenden, der Plugins ihrer name
Eigenschaft zuordnet,
Zum Beispiel die folgende Rollup-Konfiguration:
{
// ...
treeshake: true,
plugins: [
myPlugin1(),
myPlugin2()
],
// ...
}
Könnte in die folgende JSON-Darstellung umgewandelt werden:
{
"treeshake": true,
"plugins": [
"name-of-my-plugin-1",
"name-of-my-plugin-2"
]
}
Und dann könnten Sie sha1 anwenden und einen base64-String oder ähnliches herausholen, den Sie als Cache-Schlüssel verwenden könnten?
Ich dachte in diese Richtung, aber würde das nicht noch mehr Dinge aus der Berücksichtigung für den Cache entfernen? Ich vermute, dass object-hash
speziell erstellt wurde, weil JSON.stringify
alles wegwirft, was keine reine Werteeigenschaft, kein Array oder ein Wörterbuch ist - es gibt nichts anderes in json spec.
Ich nehme an, ich könnte einen Hash von package-lock,json
und ein Garnäquivalent einbauen, wenn es einen zuverlässigen Weg gäbe, sie zu finden. (um den Effekt der Option objectHashIgnoreUnknownHack
abzuschwächen)
Danke Leute, die über dieses Problem diskutieren. Tatsächlich clean: true
Option ignoreUnknown
könnte jedoch möglicherweise der Weg sein, dieses Problem zu beheben, wie @ezolenko sagt. Ich werde sowieso 0.16.2 warten!
@vwxyutarooo , ich war davon ausgegangen, dass clean: true
eine Noop-Cache-Strategie verwendet. Daran erinnere ich mich, dass
Ich weiß nicht , wie dieses Objekt-Hash - Ergebnis beeinflusst, aber die objectHashIgnoreUnknownHack
Option auf objecthash
Zweig arbeitet für mich.
Ich habe den Cache ein wenig überarbeitet, sodass clean: true
nicht einmal den Objekt-Hash aufruft und alles in den Master einfügt. Ich werde in ein paar Tagen freigeben
In 0.17.0 jetzt
Für eine andere Problemumgehung, die den objectHashIgnoreUnknownHack
Hack nicht verwendet, bin ich mit rollup-plugin-require-context
auf dieses Problem gestoßen, und das folgende Snippet scheint zu funktionieren:
import requireContextORIGINAL from 'rollup-plugin-require-context'
const requireContext = (options) => {
const plugin = requireContextORIGINAL(options)
return {
name: plugin.name,
transform(code, id) {
return plugin.transform(code, id)
}
}
}
Nämlich, transform
einer normalen Funktion zu machen, die ein Promise zurückgibt.
Ich dachte, ich würde hier ein Update für die Leute hinzufügen, dass die Ursache hier endlich in https://github.com/puleos/object-hash/pull/90 behoben wurde (sehr ähnlich wie https://github.com/puleos/ object-hash/pull/68 (siehe oben) und hier in #203. Keine Notwendigkeit, objectHashIgnoreUnknownHack
zu verwenden, um asynchrone Plugins zu unterstützen und keine Cache-Probleme mehr - wurde gerade als v0.26.0 veröffentlicht
Hilfreichster Kommentar
Ich muss zugeben, dass ich überrascht bin, dass dies bisher kein größeres Problem war, da asynchrone Funktionen inzwischen sehr verbreitet sind 😀. Deshalb denke ich auch, dass das einfache Ignorieren zu vielen Cache-Problemen führen wird. Die PR, die ich vor einiger Zeit bei object-hash eingereicht habe, war eine Folge genau dieses Problems, und ich würde vorschlagen, dass Sie die Abhängigkeit von Object-Hash entfernen. Ich bin mir ziemlich sicher, dass der vor einiger Zeit eingereichte PR gut funktionieren würde, da er mit dem gleichen Wert übereinstimmt, der in der Fehlermeldung angegeben ist, und beide Komponententests bestanden und die Probleme in diesem Plugin gelöst hat. Verlassen Sie sich also auf den PR anstelle des NPM-Pakets hier.
@vwxyutarooo , eine sofortige
clean: true
in der Konfiguration festzulegen , um den Cache vollständig zu umgehen. Alternativ (sorry für den Stecker) habe ich https://github.com/wessberg/rollup-plugin-ts gebaut, was auch gut funktioniert