Estou tentando colocar meu primeiro aplicativo TypeScript e DefinitelyTyped Node.js em execução e com alguns erros.
Estou recebendo o erro "TS2304: Não é possível encontrar o nome 'require'" quando tento transpilar uma página simples do TypeScript Node.js. Eu li várias outras ocorrências desse erro no Stack Overflow e não acho que tenha problemas semelhantes. Estou executando no prompt de shell do comando:
tsc movie.server.model.ts.
O conteúdo deste arquivo é:
'use strict';
/// <reference path="typings/tsd.d.ts" />
/* movie.server.model.ts - definition of movie schema */
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var foo = 'test';
O erro é lançado na var mongoose=require('mongoose')
linha.
O conteúdo do arquivo typings / tsd.d.ts é:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
As referências do arquivo .d.ts foram colocadas nas pastas apropriadas e adicionadas às typings / tsd.d.ts pelos comandos:
tsd install node --save
tsd install require --save
O arquivo .js produzido parece funcionar bem, então eu poderia ignorar o erro. Mas eu gostaria de saber por que esse erro ocorre e o que estou fazendo de errado.
fonte
when I attempt to transpile a simple ts node page
<Como você transpiling ... qual utilitárioimport { mongoose } from 'mongoose'
?Respostas:
Rapido e sujo
Se você tiver apenas um arquivo usando o require ou estiver fazendo isso para fins de demonstração, poderá definir o request na parte superior do seu arquivo TypeScript.
TypeScript 2.x
Se você estiver usando o TypeScript 2.x, não precisará mais ter o Typings ou Definitely Type digitado. Simplesmente instale o seguinte pacote.
O futuro dos arquivos da declaração (15/6/2016)
Verifique ou edite seu src /tsconfig.app.json para que ele contenha o seguinte:
Verifique se o arquivo está na pasta src e não na pasta do aplicativo raiz.
Por padrão, qualquer pacote em @types já está incluído no seu build, a menos que você tenha especificado uma dessas opções. Consulte Mais informação
TypeScript 1.x
Usando tipagens (substituição do DefinitelyTyped), você pode especificar uma definição diretamente de um repositório do GitHub.
Instalar tipografias
Instale a definição de tipo requireJS no repositório do DefinitelyType
Webpack
Se você estiver usando o Webpack como sua ferramenta de construção, poderá incluir os tipos de Webpack.
npm install --save-dev @ types / webpack-env
Atualize seu
tsconfig.json
com o seguinte emcompilerOptions
:Isso permite que você faça
require.ensure
e outras funções específicas do Webpack.CLI angular
Com a CLI, você pode seguir a etapa Webpack acima e adicionar o bloco "types" ao seu
tsconfig.app.json
.Como alternativa, você pode usar os
node
tipos pré-instalados . Lembre-se de que isso incluirá tipos adicionais no código do lado do cliente que não estão realmente disponíveis.fonte
Unable to find "require" ("npm") in the registry
. Requer parte de um conjunto maior de tipações nodeJS?require
. talvez seja a resposta certa para algumas variações da meta de saída do ES5, mas não no caso geral.@types/node
são as definições de TypeScript. O nó não inclui isso, nem deveria.Para o TypeScript 2.x , agora existem duas etapas:
Instale um pacote que define
require
. Por exemplo:Diga ao TypeScript para incluí-lo globalmente em
tsconfig.json
:A segunda etapa é importante apenas se você precisar acessar funções disponíveis globalmente, como
require
. Para a maioria dos pacotes, você deve apenas usar oimport package from 'package'
padrão. Não há necessidade de incluir todos os pacotes na matriz de tipos tsconfig.json acima.fonte
"types": ["jasmine", "hammerjs"]
aotsconfig.js
Ide adicionarnode
também. Obrigado Jordan.import express from "express";
agora está me dizendo que preciso tentar instalar o @ types / express ou adicionar um arquivo .d.ts.@types/...
que apenas uma@types/node
pasta, não adicione"types": ["node"]
,tsconfig.json
porque o compilador TypeScript omitirá outros pacotes não mencionados. Isso interromperá a resolução dos tipos de IDEs. Está escrito aqui typescriptlang.org/docs/handbook/…Você pode
Ou, para um suporte mais abrangente, use o arquivo require.d.ts do DefinitelyTyped
Além disso, em vez de
var mongoose = require('mongoose')
, você pode tentar o seguintefonte
use strict
no TypeScript: resposta basarat e "Use Strict" necessários em um arquivo TypeScript? . É necessário usaruse strict
no TypeScript."use strict"
, eu vou editar a minha respostaEsta resposta está relacionada às configurações modernas (TypeScript 2.x, Webpack > 2.x)
Você não precisa instalar @ types / node (que é todos os tipos de Node.js. e é irrelevante para o código de front-end, na verdade complica coisas como setTimout diferentes valores de retorno, etc.
Você fazer necessidade de instalar @ tipos / Webpack-env
npm i -D @types/webpack-env
que dá as assinaturas de execução que tem Webpack (incluindo
require
,require.ensure
etc.)Verifique também se o seu arquivo tsconfig.json não possui uma matriz 'types' definida -> o que fará com que todas as definições de tipos sejam capturadas na pasta node_modules / @ types.
Se você deseja restringir a pesquisa de tipos, é possível configurar a propriedade typeRoot como node_modules / @ types.
fonte
Ao invés de:
Tentar:
ou seja, caminho de referência primeiro.
fonte
No meu caso, foi um problema super estúpido, em que o
src/tsconfig.app.json
estava substituindo atsconfig.json
configuração.Então, eu tive isso em
tsconfig.json
:E este em
src/tsconfig.app.json
:Espero que alguém ache isso útil, pois esse erro estava me causando cabelos grisalhos.
fonte
Apenas para referência, estou usando o Angular 7.1.4 , TypeScript 3.1.6 , e a única coisa que preciso fazer é adicionar esta linha
tsconfig.json
:fonte
npm i @types/node
e adicionenode
ao campo de tipos no seu tsconfig. - o npm foi instalado.Eu achei que a solução era usar o comando TSD:
Que adiciona / atualiza o
typings/tsd.d.ts
arquivo e esse arquivo contém todas as definições de tipo necessárias para um aplicativo de nó.No topo do meu arquivo, eu coloquei uma referência
tsd.d.ts
como esta:O requisito é definido assim em janeiro de 2016:
fonte
Peguei a resposta de Peter Varga para adicioná-la
declare var require: any;
e a converti em uma solução genérica que funciona para todos os arquivos .ts genericamente usando o pré-processo-loader :instale o pré-processador-carregador:
adicione o carregador ao seu webpack.config.js (estou usando o ts-loader para processar fontes TypeScript):
Você pode adicionar o require.d.ts mais robusto da mesma maneira, mas
declare var require: any;
foi suficiente na minha situação.Observe que há um erro no pré-processador 1.0.5 , que interrompe a última linha; portanto, verifique se você tem um retorno extra de espaço de linha no final e se está bem.
fonte
Eu também tenho lutado com esse problema. Acredito que isso funcione para todos os candidatos a lançamento, também conhecidos como rc, mas não testei. Para @ rectangular rc.2 , funciona bem.
core-js
como dependência npm empackage.json
typings install core-js --save
"es6-shim"
ocorrências no seupackage.json
. Você não precisa mais disso.Felicidades!
fonte
Verifique se você instalou
npm i @types/node
fonte
importação * como mangusto de 'mangusto'
fonte
Às vezes, a falta de "jasmim" do tsconfig.json pode causar esse erro. (TypeScript 2.X)
Então adicione
para o seu
tsconfig.json
arquivo.fonte
Adição de elétron + angular 2/4:
Além de adicionar o tipo 'node' aos vários arquivos ts.config, o que funcionou para mim foi adicionar o próximo ao
typings.d.ts
arquivo:Observe que meu caso está se desenvolvendo com Electron + Angular 2/4. Eu precisava da exigência na janela global.
fonte
Para mim, isso é resolvido adicionando tipos às opções do compilador angular.
fonte
Você especificou qual módulo usar para transpilar o código?
tsc --target es5 --module commonjs script.ts
Você deve fazer isso para que o transpiler saiba que está compilando o código NodeJS. Docs .
Você também deve instalar definições de mangusto
tsd install mongoose --save
Não use
var
para declarar variáveis (a menos que necessário, que é um caso muito raro), use em seulet
lugar. Saiba mais sobre issofonte
Além da resposta da cgatian, para o TypeScript 1.x
Se você ainda estiver vendo erros, forneça index.d.ts especificamente nas opções do seu compilador.
fonte
Não foi possível obter o erro 'exigir' para desaparecer usando qualquer um dos truques acima.
Mas descobri que o problema era que minhas ferramentas TypeScript para o Visual Studio eram uma versão antiga (1.8.6.0) e a versão mais recente de hoje (2.0.6.0).
Você pode baixar a versão mais recente das ferramentas em:
TypeScript para Visual Studio 2015
fonte
Se você puder compilar o código, mas as marcas 'require' do Visual Studio 2015 funcionarem, pois os erros com o texto do erro não podem encontrar o nome 'require' ou não podem resolver o símbolo 'require' , atualize o TypeScript for Visual Studio 2015 para a versão mais recente (no momento 2.1. 5) e atualize o ReSharper (se você o usar) para pelo menos a versão 2016.3.2.
Eu tive esse problema irritante por um tempo e não consegui encontrar uma solução, mas finalmente resolvi dessa maneira.
fonte
Adicione o seguinte em
tsconfig.json
:fonte
Eu tenho ainda uma outra resposta que se baseia em todas as anteriores que descrevem
npm install @types/node
e inclusivenode
notsconfig.json / compilerOptions / types
.No meu caso, eu tenho uma base
tsConfig.json
e uma separada no aplicativo Angular que estende esse:Meu problema era o vazio
types
nissotsconfi.app.json
- ele derruba aquele na configuração base.fonte
Se você estiver enfrentando esse problema em um arquivo .ts, que existe apenas para fornecer alguns valores constantes, basta
e o erro não voltará.
fonte