Vm2: Adicione o módulo `coffee-script` como uma dependência

Criado em 8 abr. 2017  ·  23Comentários  ·  Fonte: patriksimek/vm2

Ao executar seu módulo via código que é transformado pelo webpack/babel, recebo o seguinte problema:

Module not found: Error: Can't resolve 'coffee-script' in '/node_modules/vm2/lib'
 @ ./~/vm2/lib/main.js 19:10-34
 @ ./~/vm2/index.js
 @ ./lib/config.js
 @ ./lib/server.js

https://github.com/patriksimek/vm2/blob/master/lib/main.js#L19

Nesta linha você está usando o módulo coffee-script , mas não está definido como uma dependência de módulo.
Então, quando o webpack tenta mapear todos os requisitos, ele trava porque não consegue encontrar o módulo coffee-script em nenhum lugar.

UPD: esta não é uma solicitação de recurso, este é um problema de dependências do módulo vm2. Até que este módulo tenha esta linha presente, ele não funcionará com a opção do compilador especificada como coffee-script em qualquer ambiente sem o módulo coffee-script instalado.

wontfix

Comentários muito úteis

@dkfiresky Uau, você realmente esperava que eu forçasse dezenas de milhares de usuários a baixar o coffee-script, mesmo que eles não precisassem apenas porque você não está disposto a esperar por uma solução adequada? Isso é triste.

@n-riesco Na verdade, isso já é suportado. O problema é que abandonar o suporte para a opção coffeescript é uma mudança importante e eu gostaria de tentar uma solução melhor primeiro (se houver).

Todos 23 comentários

Obrigado por relatar um problema. Eu quase não tenho experiências com o Webpack, então provavelmente estou errado, mas e se você adicionar coffee-script como uma dependência no projeto pai? Estou assumindo que os processos do Webpack exigem a mesma maneira que o Node - ele pesquisa todas as pastas node_modules até a raiz.

Eu não quero adicionar um coffee-script como uma dependência do meu próprio projeto só porque seu módulo exige. Eu não uso coffee-script .

Se você estiver usando o módulo de alguém em seu próprio projeto, você deve declará-lo como uma dependência.

Além disso, se alguém instalar seu módulo e essa pessoa não tiver um módulo coffee-script instalado em qualquer lugar (no projeto ou global), ele também acionará esse erro. Não depende do Webpack.

Ok, pensei que você estivesse usando o script de café. Nesse caso, esta biblioteca não é compatível com webpack atm. Vou tentar descobrir isso se tiver algum tempo livre.

Este não é um caso de compatibilidade com webpack.

É um caso de como você publica e fornece seu módulo para o npm.

Eu não concordo, esta biblioteca funciona sem o coffee-script corretamente, então não há razão para vinculá-la como uma dependência necessária. É usado apenas quando o usuário declara explicitamente que deseja usar o coffee-script. Vou refatorar isso para algum tipo de mecanismo de plugin.

A razão é que você requer explicitamente o coffee-script em seu código, o que pressupõe que ele deve ser instalado de alguma forma.

Se você já instalou o coffee-script em sua máquina - tudo bem e funcionará, caso contrário, causará um problema quando eu não tiver coffee-script instalado em qualquer lugar e iniciei o vm com o conjunto de opções do compilador para um de 'coffeescript', 'coffee-script', 'cs' ou 'text/coffeescript' (conforme indicado em https://github.com/patriksimek/vm2/blob/master/lib/main.js#L14- L18).

Também não concordo que este seja um feature request , pois seu módulo não funciona com o compilador coffee-script se ainda não estiver instalado. E a documentação não diz nada sobre o requisito de coffee-script ser pré-instalado.

Sim, você descreveu precisamente como funciona agora. A biblioteca espera que o usuário tenha o coffee-script instalado se o compilador estiver configurado para coffee.

Você está certo sobre os documentos, está atualizado.

Sim, a correção da documentação não resolve o problema. Você ainda tem a linha require('coffee-script') no seu código, que produzirá o erro, pelo menos para o webpack.

Sim, e como escrevi no post anterior, vou refatorar isso para algum tipo de mecanismo de plugin para que seja compatível com o webpack.

Não importa, se é tão difícil para você executar um comando simples:

> npm install coffee-script --save

Não vou mais usar nem esperar que seu projeto resolva o problema.

@patriksimek Pessoalmente, vejo o benefício de ter algum tipo de mecanismo de plug-in.

Que tal algo simples como options.compiler ser uma função?

Em seguida, os usuários que precisam de CoffeeScript podem definir options.compiler para (code) => { return require('coffee-script').compile(code, {header: false, bare: true}); } .

@dkfiresky Uau, você realmente esperava que eu forçasse dezenas de milhares de usuários a baixar o coffee-script, mesmo que eles não precisassem apenas porque você não está disposto a esperar por uma solução adequada? Isso é triste.

@n-riesco Na verdade, isso já é suportado. O problema é que abandonar o suporte para a opção coffeescript é uma mudança importante e eu gostaria de tentar uma solução melhor primeiro (se houver).

@patriksimek Espero que você entregue seu módulo corretamente. O uso do coffee-script é de sua responsabilidade. Se você usá-lo, você deve defini-lo como uma dependência. Se você não concordar, remova essa instrução require e a opção do compilador que indica coffee-script como uma opção.

Esse problema foi criado porque seu módulo não funciona imediatamente. Esperar 18 dias para você executar um comando de instalação simples parece uma piada.

Além disso, se você declarar que seu módulo compila coffee-script , você deve entregar esse módulo como uma dependência em seu package.json .

você realmente esperava que eu forçasse dezenas de milhares de usuários a baixar o coffee-script

Isso que você fez por require('coffee-script') em seu código . Você espera que eu instale o coffee-script mesmo que eu não o use.

Esperar 18 dias para você executar um comando de instalação simples parece uma piada.

Você ainda espera que eu faça o que eu disse que nunca faria. Então, novamente - este módulo não é compatível com o Webpack no momento, por favor, não use esta biblioteca.

@patriksimek este módulo não é compatível nem executável em qualquer ambiente sem coffee-script instalado.

@dkfiresky Claro, se você pensa assim. Não estou mais interessado em convencê-lo de que está errado. Podemos, por favor, parar com essa discussão inútil?

@patriksimek sim, com certeza. Por favor, leia alguns documentos do npm.

Eu também recebo isso em um novo projeto de reação, antes de adicionar vm2 como uma dependência, não tive erros sobre o script de café

Failed to compile.

/Users/mark/node_modules/coffee-script/lib/coffee-script/coffee-script.js
Module not found: Can't resolve 'module' in '/Users/mark/node_modules/coffee-script/lib/coffee-script'

Mesmo que o tom da discussão não tenha sido muito construtivo, eu realmente acredito que coffee-script deveria ser adicionado como uma dependência. Seria uma solução muito simples e permitiria usar este pacote em vários ambientes (ex. Webpack, Next, etc.).

Esta página foi útil?
0 / 5 - 0 avaliações