当我的库依赖于“file://”URL 时,我可以在库中使用对等依赖项吗?

问题描述 投票:0回答:1

更新:我不知道这是否回答了我的问题,但是当我将

lib-package
发布到 npmjs.com 并依赖于已发布的包时,代码的行为符合我的预期。


这是我的依赖树:

(我不确定

"^23"
是否是有效的语义版本,但我也尝试过
"^23.2.0"
并没有看到任何区别。)

我是这个问题中除

jsdom
之外的所有包裹的所有者。
app-package
有一个简单的
index.js

import { ConfigurableResourceLoader } from 'jsdom-configurable-resource-loader';
import { ResourceLoader } from 'jsdom';
import { myFromFile } from 'lib-package';

console.log(`Is ConfigurableResourceLoader an instance of ResourceLoader?`, ConfigurableResourceLoader instanceof ResourceLoader);
myFromFile(new ConfigurableResourceLoader());

当我执行此文件时,出现错误并显示以下消息:

Is ConfigurableResourceLoader an instance of ResourceLoader? false
C:\\my-projects\jsdom-sandbox\lib-package\node_modules\jsdom\lib\api.js:321
        throw new TypeError("resources must be an instance of ResourceLoader");
              ^

TypeError: resources must be an instance of ResourceLoader
    at resourcesToResourceLoader (C:\\my-projects\jsdom-sandbox\lib-package\node_modules\jsdom\lib\api.js:321:15)
    at transformOptions (C:\\my-projects\jsdom-sandbox\lib-package\node_modules\jsdom\lib\api.js:263:46)
    at new JSDOM (C:\\my-projects\jsdom-sandbox\lib-package\node_modules\jsdom\lib\api.js:34:15)
    at JSDOM.fromFile (C:\\my-projects\jsdom-sandbox\lib-package\node_modules\jsdom\lib\api.js:152:12)

我困惑的主要点是错误消息中的这条路径:

C:\\my-projects\jsdom-sandbox\**lib**-package\node_modules\jsdom\lib\api.js:321:15
我认为peerDependency的重点是让
app-package
使用它自己的
jsdom
,但这看起来像是使用
lib-package

我假设这首先导致了错误消息,但我不知道我做错了什么。我是否错误地使用了对等依赖项,或者当通过“file://...”依赖包时它们不起作用?

我在 github 上构建了这些项目,以便其他人检查整个代码库:https://github.com/DanKaplanSES/jsdom-sandbox/tree/lib-has-peer-dependency-and-lib-is-file -依赖-所以

这是这些项目的package.json文件。

应用程序包./package.json

{
  "name": "app-package",
  "version": "0.0.1",
  "description": "A simple sandbox for playing around with jsdom.",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "npm run exec && jasmine --config=\"spec/support/jasmine-spec.json\"",
    "exec": "node index.js",
    "lint": "eslint '**/*.(js|ts)' --fix"
  },
  "devDependencies": {
    "@prettier/sync": "^0.3.0",
    "@types/jasmine": "^5.1.4",
    "@types/jquery": "^3.5.29",
    "@types/jsdom": "^21.1.6",
    "eslint": "^8.56.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-no-floating-promise": "^1.0.2",
    "eslint-plugin-prettier": "^5.1.3",
    "jasmine": "^5.1.0",
    "jsdom": "^23.2.0",
    "jsdom-configurable-resource-loader": "^0.0.8",
    "lib-package": "file:../lib-package",
    "prettier": "^3.2.2"
  }
}

lib-package ./package.json

{
  "name": "lib-package",
  "version": "0.0.1",
  "description": "A simple sandbox for playing around with jsdom.",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "npm run exec && jasmine --config=\"spec/support/jasmine-spec.json\"",
    "exec": "node index.js",
    "lint": "eslint '**/*.(js|ts)' --fix"
  },
  "devDependencies": {
    "@prettier/sync": "^0.3.0",
    "@types/jasmine": "^5.1.4",
    "@types/jquery": "^3.5.29",
    "@types/jsdom": "^21.1.6",
    "eslint": "^8.56.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-no-floating-promise": "^1.0.2",
    "eslint-plugin-prettier": "^5.1.3",
    "jasmine": "^5.1.0",
    "prettier": "^3.2.2"
  },
  "peerDependencies": {
    "jsdom": "^23"
  }
}

jsdom-可配置-资源加载器./package.json

{
  "name": "jsdom-configurable-resource-loader",
  "description": "A JSDOM ResourceLoader with configuration options to whitelist and blacklist resources.",
  "version": "0.0.8",
  "main": "dist/index.js",
  "module": "dist/index.mjs",
  "types": "dist/index.d.ts",
  "license": "MIT",
  "files": [
    "dist"
  ],
  "scripts": {
    "compile-typescript": "tsup-node",
    "build": "tsup-node",
    "test": "jasmine --config=\"spec/support/jasmine-spec.json\"",
    "clean": "rm -rf dist"
  },
  "keywords": [
    "jsdom",
    "resourceloader",
    "resource-loader"
  ],
  "author": {
    "name": "Daniel Kaplan",
    "email": "[email protected]"
  },
  "devDependencies": {
    "@types/jasmine": "5.1.4",
    "@types/jsdom": "21.1.6",
    "@types/sinon": "^17.0.2",
    "@typescript-eslint/eslint-plugin": "6.17.0",
    "eslint": "8.56.0",
    "eslint-config-prettier": "9.1.0",
    "eslint-plugin-prettier": "5.1.2",
    "jasmine": "5.1.0",
    "sinon": "^17.0.1",
    "ts-node": "10.9.2",
    "tslib": "2.6.2",
    "tsup": "8.0.1",
    "typescript": "5.3.3"
  },
  "peerDependencies": {
    "canvas": "2",
    "jsdom": "^23"
  }
}
node.js package.json
1个回答
0
投票

默认情况下,

npm install
将为
file:
协议依赖项创建符号链接。
npm install --install-links
将把它们安装为常规依赖项而不是链接
,这将解决问题。

我有一种感觉,这里发生的事情比我意识到的要多。如果我的链接使用对等依赖项,那么我需要

--install-links
才能获得预期的行为,这感觉有点随意。可能是我在 Windows 上进行开发的事实在这里发挥了作用:也许 Linux 会按照最初问题中的预期工作。不管怎样,这至少是解决问题的多种方法之一,所以我将其发布为答案。

© www.soinside.com 2019 - 2024. All rights reserved.