But I’d prefer storing library locally. Normally I’d use vendor.js to include it and have it loaded before the plugin code, but this approach needs hacking with the Discourse core… So what is recommended way and where to add external js library to plugin? Is there some convention? Thx.
Thanks… In the assets folder will it be loaded automatically or do I need to take care of asynchronous load as quoted in previous post? I need to load library before running plugin code.
I asked a similar question a few days ago (Existing JS module import into ES6 plugin). The problem I have is, that I want it included server side and I have no idea on which path I should require it in ES6 modules.
Desculpe reviver este tópico, mas foi para cá que o Google me levou. Tenho tentado há algumas horas carregar uma biblioteca JS dentro do meu plugin.
Na pasta assets/javascripts do meu aplicativo, tenho um arquivo chamado argdown-core.js.
No meu arquivo plugin.rb, estou fazendo register_asset 'javascripts/argdown-core.js'.
Em assets/javascripts/discourse-markdown/argdown.js.es6, estou fazendo import { argdown } from "argdown-core.js".
Tentei muitas variações do acima e continuo recebendo Uncaught Error: Could not find module argdown-core.js imported from discourse/plugins/Argdown/discourse-markdown/argdown.
Algumas das coisas que tentei:
Mover o arquivo para várias pastas
Muitas permutações na linha import
Adicionar .es6 à extensão do arquivo - outros arquivos JS parecem precisar disso para rodar
Adicionar :server_side ao final da minha linha register_asset no plugin.rb, já que é onde isso deve rodar
Procurar outros plugins que exigem bibliotecas de terceiros - não encontrei nenhum que use estratégias que eu não esteja usando
Explorar o código do Discourse para tentar entender o sistema de bundling
Isso provavelmente é simples e há algo óbvio que estou perdendo. Alguém pode ajudar?
Além disso, uma pequena dica: na programação, as coisas sempre parecem difíceis quando você sente que não conhece os efeitos de suas ações. É importante saber o que está acontecendo. Recomendo executar este comando no seu console: window.requirejs.entries. Isso pode ajudá-lo a entender algumas coisas.
Obrigado, isso foi muito útil! Colocar minha biblioteca na pasta assets/lib está ajudando bastante.
Agora que tenho o caminho correto para ela, a biblioteca está apresentando problemas. É uma biblioteca grande com muitos submódulos — o argdown.js requer o ArgdownApplication.js e vários outros. Quando tenta carregar o ArgdownApplication.js, aparece a mensagem “Uncaught ReferenceError: exports is not defined”.
Tentei empacotar tudo em um único arquivo usando o Webpack, mas, por algum motivo, o pacote está faltando uma biblioteca de terceiros chamada “punycode”. Tentei adicionar o punycode ao módulo compilado, tentei enviá-lo para a pasta lib e adicionar register_asset 'lib/punycode.js' no plugin.rb, mas não estou tendo muito sucesso.
A biblioteca funciona no meu computador e em outro plugin que escrevi. Existe alguma maneira recomendada de adicionar um módulo NPM a um plugin do Discourse? Esta discussão diz para copiar a pasta do módulo para sua pasta /lib/; isso não está funcionando para mim.* Você poderia me indicar um exemplo de alguém que conseguiu enviar com sucesso um módulo NPM complexo com um plugin do Discourse, para que eu possa ver o que estou fazendo de errado?
*Nessa discussão, eles estão tentando carregar o módulo remotamente do unpkg.com; eu preferiria fazer isso localmente, embora talvez devesse tentar essa opção.