#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).