我最近发布了一个用 TypeScript 编写的简单 React 模块。我通过将本地包导入到项目中来测试我的模块,并且它运行完美。但是,现在我已经发布了该模块,每当我尝试将其导入项目时,都会收到以下错误:
Failed to compile.
./src/...
Module not found: Can't resolve '<module>' in '.../src/...'
Run Code Online (Sandbox Code Playgroud)
package.json
包在和中列出package-lock.json
,模块显示在 中node_modules
。此外,VS Code 不会出现任何问题,所以我不太确定可能是什么问题。
我使用npm publish
返回错误 400 Bad Request,\n我尝试了以下步骤的方法:
delete node_modules
npm cache clean -f
npm install
npm audit
但它不起作用。如果您有同样的问题或解决方法\xef\xbc\x8c请告诉我\xef\xbc\x8c谢谢\xef\xbc\x81
\n我的环境是windows10: v18363.1198
node: v14.15.1
npm: v6.14.9
\n\nRun Code Online (Sandbox Code Playgroud)\nhttp fetch PUT 400 https://registry.npmjs.org/byte-download 1400ms\nverbose stack Error: 400 Bad Request - PUT https://registry.npmjs.org/byte-download - Bad Request\nverbose stack at D:\\Program Files\\nodejs\\node_global\\node_modules\\npm\\node_modules\\npm-registry-fetch\\check-response.js:117:15\nverbose stack at processTicksAndRejections (internal/process/task_queues.js:93:5)\nverbose statusCode 400\n
我们正在使用 tsdx 构建共享代码项目,我们只有一个疑问,担心我们无法得到答案。如何导出使用 TSDX 发布的包的子文件夹。
让我们用我之前的例子来回答这个问题。在我们项目的入口点,我们将这两个组件导出到根目录中。
因此,当您想使用它们时,我们必须从库的根目录导入组件(使用示例):
import { Thing, SimpleStyledH1Application } from "tsdx-styled-components"
Run Code Online (Sandbox Code Playgroud)
我们想知道如何配置我们的入口点,以便我们可以从子文件夹中导入我们的组件,例如
import { Thing } from "tsdx-styled-components/things"
import { SimpleStyledH1Application } from "tsdx-styled-components/styled"
import { CoreComponent } from "tsdx-styled-components"
Run Code Online (Sandbox Code Playgroud)
关于如何将子文件夹添加到我们创建的库中的指南/注释,这样(不仅对我来说而且对使用 TSDX 的任何人来说)如何创建带有子文件夹的库都很容易。
示例项目:
https://github.com/robertovg/tsdx-styled-components/ https://github.com/robertovg/next-ts-styled-components-tsdx-host
这个问题最初作为tsdx上的问题发布,但几个月后没有答案,我想将其移至此处,看看是否有人解决了该问题。
我在 JavaScript 中创建了一些函数。
我发现我在许多项目中重复使用它们。
所以我决定为我的编码创建一个小的 JavaScript 库。像 react、react-dom、jquery 这样的库,我可以用 npm 安装它:
npm install <my-personal-library>
我在网上搜了一下。我了解到我可以使用npm publish <my-personal-library
,但我不知道如何格式化我的库和函数,以便像 npm 包一样使用和安装它们。
我也不知道为我的函数和库创建类型定义。像@types/react 任何指导?
我想将共享的通用代码放入私有的 npm 注册表中。
使用下面的命令和 tsconfig 一直工作得很好,直到我想通过发布到 npm 注册表使一个项目依赖于另一个项目。
我有几个文件夹和很多文件,所以我使用路径和 tsconfig-paths (导入看起来很干净,例如import { Repo } from "adapters/api/repository";
)。
常见项目可以自行正确构建,但是一旦发布并用作依赖项,当我构建使用它的项目时,它就会出现构建错误。
共同项目;构建良好:与rm -rf dist && tsc --sourceMap -p ./ && cp tsconfig.json dist/ && cp .env dist/
.
包的文件结构为:
dist
src
adapters
api
repository.d.ts
repository.js
...
application
interfaces
interfaceA.d.ts
interfaceA.js
...
...
index.d.ts
index.js
tsconfig.json
Run Code Online (Sandbox Code Playgroud)
哪里src/adapters/api/repository.ts
:
import { InterfaceA } from "application/interfaces/interfaceA";
export interface ApiRepository {
property: InterfaceA;
...
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"lib": [
"es2016" …
Run Code Online (Sandbox Code Playgroud) 有没有最好的方法来发布 npm 包的先前主要版本而不为其添加标签?我们当前的主要版本是 3.x (v3),因此我们npm publish
会自动为该版本赋予标签latest
。当我们发布2.x
版本 (v2) 的更新时,我们必须给它一个标签,这样它就不会自动latest
从 v3 中获取标签。
我们可以做类似的事情previous
,尽管它的含义是主观的。事实上,我们根本不需要v2 的标签。如果人们想安装 v2,Semver 效果很好。有没有比使用标签发布并添加postpublish
删除标签的脚本更好的解决方案来不添加不必要的标签?(我写的时候听起来很可笑)
我开发了一个供公司内部使用的小型 Ui 组件,并将其发布到 npm,但是当我安装该包时,我只在文件夹index.js
中获得一个文件node_modules
。
我没有使用任何包生成器,es-modules,只是一个简单.js
的.css
我想要作为包发布的文件夹具有以下结构:
package
- src
- index.js
- index.css
- assets/
- fonts/
- ..some fonts
- images/
- icon.svg
- package.json
Run Code Online (Sandbox Code Playgroud) NPM 不遵循目录符号链接,也不遵循目录连接。是否有某种配置或方法可以强制 NPM 也包含此类目录中的文件?
\n最小的可重现示例。文件夹结构:
\nhello/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo.js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar/\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar.js\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo/ (SYMLINK)\n\n
Run Code Online (Sandbox Code Playgroud)\n有两种类型的符号链接不起作用:
\nhello/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo.js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar/\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar.js\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo/ (SYMLINK)\n\n
Run Code Online (Sandbox Code Playgroud)\nbar> mklink /J foo ..\\foo\n
Run Code Online (Sandbox Code Playgroud)\n打包命令
\nbar> mklink /D foo ..\\foo\n
Run Code Online (Sandbox Code Playgroud)\nfoo/foo.js
生成没有文件夹的tar 包foo/
。
bar> npm pack\n
Run Code Online (Sandbox Code Playgroud)\n 我正在维护我的第一个npm包,所以这可能是我的一个错误。构建我的包并将其提交到git后,下一步是:
\n$ npm version patch\n$ npm publish\n
Run Code Online (Sandbox Code Playgroud)\n输出(节略)如下:
\n\nnpm notice \nnpm notice @mememe/p3-model@0.7.2\nnpm notice === Tarball Contents === \nnpm notice 188B README.md \nnpm notice 4.5kB dist/doc.d.ts\n\n (etc) \n \nnpm notice 792B package.json \nnpm notice === Tarball Details === \nnpm notice name: @mememe/p3-model \nnpm notice version: 0.7.2 \nnpm notice filename: @mememe/p3-model-0.7.2.tgz \nnpm notice package size: 6.2 kB \nnpm notice unpacked size: 23.2 kB \nnpm notice shasum: cb5588ee626efc21532845c608fdb05a5fcd4db3\nnpm notice integrity: sha512-s7IK2HSXCNTUk[...]ZHxDgAOIr4Cnw==\nnpm notice total files: 11 …
Run Code Online (Sandbox Code Playgroud) 我计划将 JavaScript 库发布为 npm 包,并且我有一个关于包入口点和最佳实践的问题:当包不公开单个入口点时,最佳实践是什么?
exports
没有main
exports
它main
会指向一个index.js
会抛出一些有用的错误消息,解释如何使用该库我的 lib 仅与节点 > 14 兼容,我们使用该exports
属性来利用子路径导出(因为它以 ESM/CJS 模块格式提供)
正如声明的那样,该库不公开单个入口点,而是通过从特定文件导入默认导出来使用。因此消费者将使用以下语义来导入:
// ESM
import Foo from 'my-lib/path/filename1';
Run Code Online (Sandbox Code Playgroud)
// ESM
import Foo from 'my-lib/path/filename1';
Run Code Online (Sandbox Code Playgroud) npm-publish ×10
npm ×7
javascript ×3
typescript ×3
node-modules ×2
entry-point ×1
module ×1
node.js ×1
npm-package ×1
package ×1
reactjs ×1
tsconfig ×1
tsdx ×1