Suponha que eu tenha uma classe como esta (escrita em texto datilografado) e a empacote com o webpack no bundle.js
.
export class EntryPoint {
static run() {
...
}
}
No meu index.html, incluirei o pacote, mas também gostaria de chamar esse método estático.
<script src="build/bundle.js"></script>
<script>
window.onload = function() {
EntryPoint.run();
}
</script>
No entanto, o EntryPoint
é indefinido neste caso. Como eu chamaria o javascript incluído em outro script?
Adicionado : arquivo de configuração do Webpack .
javascript
html
typescript
webpack
Raven
fonte
fonte
var EntryPoint = require('EntryPoint')
está faltando no seuonload
método.require
pode ser necessário, mas o mesmo que com a importação abaixo, diz elerequire is not defined
. O que estou tentando fazer é usar o conteúdo agrupado de javascript comum, não precisaria de alguma estrutura novamente para usarrequire
? Mas estou tentando evitar isso. Espero que faça sentido.Respostas:
Parece que você deseja expor o pacote configurável do webpack como uma biblioteca . Você pode configurar o webpack para expor sua biblioteca no contexto global em uma variável própria, como
EntryPoint
.Eu não sei TypeScript, então o exemplo usa JavaScript simples. Mas a parte importante aqui é o arquivo de configuração do webpack e, especificamente, a
output
seção:webpack.config.js
index.js
Então, você poderá acessar os métodos da sua biblioteca como espera:
Verifique a essência com o código real.
fonte
library: ["GlobalAccess", "[name]"],
. Que, em seguida, fazer a var ser um objeto com os membros para cada ponto de entrada: GlobalAccess.EntryPointFoo, GlobalAccess.EntryPointBar, etc.nam run build
mas não funciona no dev env usandowebpack-dev-server
. Meu EntryPoint exportado é um objeto vazio. Alguma ideia?export function run() {}
partirmodule.exports = ...
Consegui fazer isso funcionar sem mais
webpack.config.js
modificações, simplesmente usando aimport
instrução que chamei do meu arquivo main / index.js:Para referência, aqui está o meu
weback.config.js
arquivo.Inicialmente, tentei fazer o mesmo usando
require
, no entanto, ele atribuiu o invólucro do módulo aowindow.EntryPoint
contrário da classe real.fonte
Uncaught SyntaxError: Unexpected token import
. Ou vocêindex.js
também está empacotado (eu o vejo como ponto de entrada, mas não tenho certeza)?Na minha circunstância, consegui chamar uma função de dentro do JavaScript incluído em outro script, escrevendo a função na janela ao criá-la.
Eu não era capaz de usar Babel, então isso funcionou para mim.
fonte
Tive um desafio semelhante, queria criar um pacote para várias páginas em uma jornada e queria que cada página tivesse seu próprio ponto de entrada no código e sem um pacote separado para cada página.
Aqui está minha abordagem, que é muito semelhante a Kurt Williams, mas de um ângulo ligeiramente diferente, também sem alterar a configuração do webpack:
JourneyMaster.js
Em seguida, um exemplo de como eu chamo esses métodos no final da
html
página:fonte
WEBPACK.CONFIG.JS
1. USANDO UMD
index.html
main.js
2. USAR VAR
index.html
main.js
USANDO AMD como biblioteca que usamos como (para aqueles que querem criar lib)
fonte
App.ts:
mypage.html:
fonte