bazel: «@bazel/typescript » не является пакетом

#typescript #bazel

#машинописный текст #базель

Вопрос:

Моя попытка загрузки ts_project завершается неудачей с сообщением об ошибке ниже:

 ERROR: error loading package '': Label '@npm//@bazel/typescript:index.bzl' is invalid because '@bazel/typescript' is not a package; perhaps you meant to put the colon here: '@npm//:@bazel/typescript/index.bzl'?  

WORKSPACE :

 workspace(  name = "nodejs",  managed_directories = {"@npm": ["node_modules"]}, )  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive(  name = "build_bazel_rules_nodejs",  sha256 = "cfc289523cf1594598215901154a6c2515e8bf3671fd708264a6f6aefe02bf39",  urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.4.6/rules_nodejs-4.4.6.tar.gz"], )  load("@build_bazel_rules_nodejs//:index.bzl", "npm_install") npm_install(  name = "npm",  package_json = "//:package.json",  package_lock_json = "//:package-lock.json", )  

BUILD :

 load("@npm//@bazel/typescript:index.bzl", "ts_project") load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test")  ts_project(  name = "lib",  srcs = glob(["src/**/*.ts"]),  tsconfig = "tsconfig.json",  deps = [  "@npm//@types/lodash"  ],  declaration = True,  source_map = True, )  nodejs_test(  name = "index_test",  entry_point = ":src/index.ts",  data = [  "@npm//lodash",  ":lib"  ], )  

Что случилось?

Ответ №1:

Допустим, у вас есть минимальный пакет.json, который вы нам здесь не показываете, скажем

 {  "name": "test",  "version": "1.0.0" }  

Затем , если вы проверите, что внутри @npm , вы увидите, что внутри него нет определенных пакетов.

 ❯ bazel query @npm//... @npm//:node_modules Loading: 1 packages loaded  

Вам нужно будет добавить @bazel/typescript в свой пакет.json, чтобы npm_install сделать его доступным для вас. Так что беги

 ❯ npm install @bazel/typescript  up to date, audited 25 packages in 644ms  found 0 vulnerabilities  

package.json теперь имеет

 {  "name": "test",  "version": "1.0.0",  "dependencies": {  "@bazel/typescript": "^4.4.6"  } }  

и наш запрос Bazel теперь показывает кучу доступных пакетов:

 ❯ bazel query @npm//... @npm//tsutils:tsutils__umd @npm//tsutils:tsutils__typings @npm//tsutils:tsutils__all_files [...] @npm//@bazel/typescript:typescript__nested_node_modules @npm//@bazel/typescript:typescript__files Loading: 0 packages loaded  

в том числе и тот, который в load заявлении ранее не был найден. На этом этапе вы можете попытаться создать свой пакет снова, убедившись, что добавили все необходимые зависимости (например, lodash).