2.2 设置deno开发环境

要高效地使用Deno,您应该设置您的环境。这意味着设置shell自动完成,环境变量以及您选择的编辑器或IDE。

环境变量

有几个环境变量控制Deno的行为:

DENO_DIR默认为,$HOME/.cache/deno但可以设置为任何路径,以控制将生成的和缓存的源代码写入和读取的位置。

NO_COLOR如果设置,将关闭彩色输出。参见https://no-color.org/。用户代码NO_COLOR无需--allow-env使用布尔常量就可以测试是否已设置Deno.noColor

shell自动完成

您可以使用以下deno completions <shell>命令为您的shell生成自动完成脚本 。该命令输出到stdout,因此您应该将其重定向到适当的文件。

受支持的shell是:

  • sh
  • bash
  • fish
  • powershell
  • elvish

示例(bash):

deno completions bash > /usr/local/etc/bash_completion.d/deno.bash
source /usr/local/etc/bash_completion.d/deno.bash

示例(不带框架的zsh):

mkdir ~/.zsh # create a folder to save your completions. it can be anywhere
deno completions zsh > ~/.zsh/_deno

然后将此添加到您的 .zshrc

fpath=(~/.zsh $fpath)
autoload -Uz compinit
compinit -u

并重新启动您的终端。请注意,如果仍未加载rm ~/.zcompdump/完成,则可能需要运行以删除先前生成的完成,然后compinit再次生成它们。

示例(zsh + oh-my-zsh)[推荐给zsh用户]:

mkdir ~/.oh-my-zsh/custom/plugins/deno
deno completions zsh > ~/.oh-my-zsh/custom/plugins/deno/_deno

之后,在~/.zshrc文件的plugins标记下添加deno插件。对于诸如 antigenpath将是~/.antigen/bundles/robbyrussell/oh-my-zsh/plugins命令,而命令将是antigen bundle deno诸如此类的工具。

示例(Powershell):

deno completions powershell >> $profile
.$profile

$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1默认情况下,这将创建一个Powershell配置文件 ,并且在您启动PowerShell时将运行它。

编辑器和IDE

由于Deno要求使用文件扩展名进行模块导入并允许http导入,并且当前大多数编辑器和语言服务器本身都不支持此功能,因此许多编辑器会因找不到文件或具有不必要文件扩展名的导入而引发错误。

社区已经为某些编辑器开发了扩展程序,以解决这些问题:

VS CODE

vscode_deno的beta版本在 Visual Studio市场上发布。请报告任何问题。

JetBrains IDE

可通过Deno插件获得对JetBrains IDE的支持 。

安装后,将的内容替换为 External Libraries > Deno Library > lib > lib.deno.d.ts的输出 deno types。这将确保扩展名的键入与当前版本匹配。每次更新Deno的版本时,您都必须这样做。有关如何为 Deno设置JetBrains IDE的更多信息,请在YouTrack上阅读 此注释

Vim和NeoVim

如果您安装CoC(智能引擎和语言服务器协议)或ALE(语法检查器和语言服务器协议客户端),则Vim对于Deno / TypeScript来说效果很好 。

CoC

安装CoC之后,从Vim内部运行:CocInstall coc-tsserver:CocInstall coc-deno:CocCommand deno.initializeWorkspace在您的项目中运行以初始化工作空间配置。从现在开始,诸如gd (转到定义)和gr(转到/查找引用)之类的东西应该起作用。

ALE

ALE与Deno的LSP集成在一起,不需要任何额外的配置。但是,如果您的Deno可执行文件不在中$PATH,与deno您的名称不同,或者您想使用不稳定的功能/ API,则需要覆盖ALE的默认值。请参阅 :help ale-typescript

ALE提供了对自动完成,重构,定义,查找引用等的支持,但是,键绑定需要手动配置。将以下代码段复制到vimrc/中init.vim进行基本配置,或查阅 官方文档 以更深入地了解如何配置ALE。

ALE可以通过运行来解决linter问题deno fmt。为了指示ALE使用Deno格式化程序,ale_linter需要基于每个缓冲区(let b:ale_linter = ['deno'])或针对所有TypeScript文件(let g:ale_fixers={'typescript': ['deno']})全局设置该设置。

" Use ALE autocompletion with Vim's 'omnifunc' setting (press <C-x><C-o> in insert mode)
autocmd FileType typescript set omnifunc=ale#completion#OmniFunc

" Make sure to use map instead of noremap when using a <Plug>(...) expression as the {rhs}
nmap gr <Plug>(ale_rename)
nmap gR <Plug>(ale_find_reference)
nmap gd <Plug>(ale_go_to_definition)
nmap gD <Plug>(ale_go_to_type_definition)

let g:ale_fixers = {'typescript': ['deno']}
let g:ale_fix_on_save = 1 " run deno fmt when saving a buffer

Emacs

通过结合使用tide(这是在Emacs中使用TypeScript的规范方法)和 Typescript-deno-plugin (用于Deno官方VSCode扩展)的组合,Emacs对于以Deno为目标的TypeScript项目非常有效。

要使用它,请首先确保tide已为您的Emacs实例设置了该文件。接下来,按照typescript-deno-plugin 页面上的指示 ,首先npm install --save-dev typescript-deno-plugin typescript在您的项目中(npm init -y必要时),然后将以下代码块添加到您的项目中 tsconfig.json,您就可以开始比赛了!

{
  "compilerOptions": {
    "plugins": [
      {
        "name": "typescript-deno-plugin",
        "enable": true, // default is `true`
        "importmap": "import_map.json"
      }
    ]
  }
}

Atom

在Atom上安装基于Atom软件包和基于 Atom-deno软件包。

LSP客户端

从1.6.0版或更高版本开始,Deno内置了对语言服务器协议的支持 。

如果您的编辑器支持LSP,则可以将Deno用作TypeScript和JavaScript的语言服务器。

编辑器可以使用启动服务器deno lsp

Kakoune示例

安装kak-lspLSP客户端后,您可以通过将以下内容添加到您的服务器中来添加Deno语言服务器 kak-lsp.toml

[language.deno]
filetypes = ["typescript", "javascript"]
roots = [".git"]
command = "deno"
args = ["lsp"]

[language.deno.initialization_options]
enable = true
lint = true
Vim / Neovim的示例

安装vim-lspLSP客户端后,您可以通过将以下内容添加到vimrc/中来添加Deno语言服务器 init.vim

if executable("deno")
  augroup LspTypeScript
    autocmd!
    autocmd User lsp_setup call lsp#register_server({
    \ "name": "deno lsp",
    \ "cmd": {server_info -> ["deno", "lsp"]},
    \ "root_uri": {server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), "tsconfig.json"))},
    \ "allowlist": ["typescript", "typescript.tsx"],
    \ "initialization_options": {
    \     "enable": v:true,
    \     "lint": v:true,
    \     "unstable": v:true,
    \   },
    \ })
  augroup END
endif
Sublime Text示例
{
  "settings": {
    "LSP": {
      "deno": {
        "command": [
          "deno",
          "lsp"
        ],
        "initializationOptions": {
          // "config": "", // Sets the path for the config file in your project
          "enable": true,
          // "importMap": "", // Sets the path for the import-map in your project
          "lint": true,
          "unstable": false
        },
        "enabled": true,
        "languages": [
          {
            "languageId": "javascript",
            "scopes": ["source.js"],
            "syntaxes": [
              "Packages/Babel/JavaScript (Babel).sublime-syntax",
              "Packages/JavaScript/JavaScript.sublime-syntax"
            ]
          },
          {
            "languageId": "javascriptreact",
            "scopes": ["source.jsx"],
            "syntaxes": [
              "Packages/Babel/JavaScript (Babel).sublime-syntax",
              "Packages/JavaScript/JavaScript.sublime-syntax"
            ]
          },
          {
            "languageId": "typescript",
            "scopes": ["source.ts"],
            "syntaxes": [
              "Packages/TypeScript-TmLanguage/TypeScript.tmLanguage",
              "Packages/TypeScript Syntax/TypeScript.tmLanguage"
            ]
          },
          {
            "languageId": "typescriptreact",
            "scopes": ["source.tsx"],
            "syntaxes": [
              "Packages/TypeScript-TmLanguage/TypeScriptReact.tmLanguage",
              "Packages/TypeScript Syntax/TypeScriptReact.tmLanguage"
            ]
          }
        ]
      }
    }
  }
}

如果您在此列表中没有看到自己喜欢的IDE,则可以开发一个扩展。我们的社区Discord小组可以为您提供入门指南。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容