You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发布SvelteKit npm包报错:是否应发布./package/而非./?

发布SvelteKit npm包时遇到的npm publish错误

我正尝试发布首个npm包,已通过npm link测试功能正常,但执行npm publish或npm publish --dry-run时出现错误,提示:

npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c echo 'Did you mean to publish ./package/, instead of ./?' && exit 1

开发环境

  • Svelte + SvelteKit
  • Vite
  • TypeScript

初始Vite配置

import { sveltekit } from '@sveltejs/kit/vite';

/** @type {import('vite').UserConfig} */
const config = {
   plugins: [sveltekit()]
};

export default config;

完整错误日志

0 verbose cli C:\Program Files\nodejs\node.exe C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
1 info using npm@8.11.0
2 info using node@v16.16.0
3 timing npm:load:whichnode Completed in 0ms
4 timing config:load:defaults Completed in 2ms
5 timing config:load:file:C:\Users\user1\AppData\Roaming\nvm\v16.16.0\node_modules\npm\npmrc Completed in 2ms
6 timing config:load:builtin Completed in 2ms
7 timing config:load:cli Completed in 1ms
8 timing config:load:env Completed in 1ms
9 timing config:load:file:C:\Users\user1\Namu\sveltekit-auth0\.npmrc Completed in 1ms
10 timing config:load:project Completed in 4ms
11 timing config:load:file:C:\Users\user1\.npmrc Completed in 0ms
12 timing config:load:user Completed in 1ms
13 timing config:load:file:C:\Program Files\nodejs\etc\npmrc Completed in 0ms
14 timing config:load:global Completed in 0ms
15 timing config:load:validate Completed in 0ms
16 timing config:load:credentials Completed in 1ms
17 timing config:load:setEnvs Completed in 0ms
18 timing config:load Completed in 12ms
19 timing npm:load:configload Completed in 12ms
20 timing npm:load:mkdirpcache Completed in 1ms
21 timing npm:load:mkdirplogs Completed in 1ms
22 verbose title npm publish
23 verbose argv "publish" "--dry-run"
24 timing npm:load:setTitle Completed in 1ms
25 timing config:load:flatten Completed in 2ms
26 timing npm:load:display Completed in 3ms
27 verbose logfile logs-max:10 dir:C:\Users\user1\AppData\Local\npm-cache\_logs
28 verbose logfile C:\Users\user1\AppData\Local\npm-cache\_logs\2023-01-02T20_06_32_635Z-debug-0.log
29 timing npm:load:logFile Completed in 4ms
30 timing npm:load:timers Completed in 0ms
31 timing npm:load:configScope Completed in 0ms
32 timing npm:load Completed in 22ms
33 verbose publish [ '.' ]
34 silly logfile start cleaning logs, removing 6 files
35 timing command:publish Completed in 63ms
36 verbose stack Error: command failed
36 verbose stack     at ChildProcess.<anonymous> (C:\Users\user1\AppData\Roaming\nvm\v16.16.0\node_modules\npm\node_modules\@npmcli\promise-spawn\lib\index.js:63:27)
36 verbose stack     at ChildProcess.emit (node:events:527:28)
36 verbose stack     at maybeClose (node:internal/child_process:1092:16)
36 verbose stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)
37 verbose pkgid sveltekit-auth0@0.0.1
38 verbose cwd C:\Users\user1\Namu\sveltekit-auth0
39 verbose Windows_NT 10.0.22621
40 verbose node v16.16.0
41 verbose npm  v8.11.0
42 error code 1
43 error path C:\Users\user1\Namu\sveltekit-auth0
44 error command failed
45 error command C:\WINDOWS\system32\cmd.exe /d /s /c echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1
46 verbose exit 1
47 timing npm Completed in 111ms
48 verbose code 1
49 error A complete log of this run can be found in:
49 error     C:\Users\user1\AppData\Local\npm-cache\_logs\2023-01-02T20_06_32_635Z-debug-0.log

已尝试的Vite修改配置

import { sveltekit } from '@sveltejs/kit/vite';
import * as path from 'path';

/** @type {import('vite').UserConfig} */
const config = {
   plugins: [sveltekit()],
   resolve: {
      alias: [
         {
            find: '~',
            replacement: path.resolve(__dirname, './src')
         }
      ]
   },
   server: {
      port: 3000
   },
   build: {
      manifest: true,
      minify: true,
      reportCompressedSize: true,
      lib: {
         entry: path.resolve(__dirname, 'auth0/auth-service.ts'),
         fileName: 'auth-config',
         formats: ['es', 'cjs']
      },
      rollupOptions: {
         external: [],
         plugins: [sveltekit()]
      }
   }
};

export default config;

问题原因与解决方法

这个错误是因为SvelteKit默认构建输出不在项目根目录,npm检测到直接发布根目录时,提示应发布构建产物所在的./package/文件夹,但直接发布该目录可能缺失必要配置。正确做法是调整项目配置,让npm明确发布文件范围,同时确保SvelteKit构建出符合npm包要求的产物。

步骤1:修改package.json配置

  1. 添加files字段指定要发布的文件:
    "files": [
      "package",
      "README.md",
      "LICENSE"
    ]
    
  2. 配置main和module字段指向构建后的入口文件:
    "main": "./package/auth-config.js",
    "module": "./package/auth-config.es.js"
    
  3. 添加type字段(ES模块优先):
    "type": "module"
    
  4. 配置发布前自动构建的脚本:
    "scripts": {
      "build": "vite build",
      "prepublishOnly": "npm run build"
    }
    

步骤2:调整Vite配置

移除rollupOptions中的sveltekit插件(库模式不需要SvelteKit的SPA/SSR功能),并正确声明外部依赖:

import { svelte } from '@sveltejs/vite-plugin-svelte';
import * as path from 'path';

/** @type {import('vite').UserConfig} */
const config = {
  plugins: [svelte()],
  resolve: {
    alias: [
      {
        find: '~',
        replacement: path.resolve(__dirname, './src')
      }
    ]
  },
  build: {
    lib: {
      entry: path.resolve(__dirname, 'auth0/auth-service.ts'),
      fileName: 'auth-config',
      formats: ['es', 'cjs']
    },
    rollupOptions: {
      external: ['svelte', '@sveltejs/kit']
    }
  }
};

export default config;

如果包依赖SvelteKit特定功能,需将这些依赖声明在package.json的peerDependencies中,避免重复打包。

步骤3:测试并发布

执行以下命令验证配置:

npm run build
npm publish --dry-run

若dry-run通过,即可正式发布:

npm publish

内容的提问来源于stack exchange,提问作者Simas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:40:17