发布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配置
- 添加
files字段指定要发布的文件:"files": [ "package", "README.md", "LICENSE" ] - 配置
main和module字段指向构建后的入口文件:"main": "./package/auth-config.js", "module": "./package/auth-config.es.js" - 添加
type字段(ES模块优先):"type": "module" - 配置发布前自动构建的脚本:
"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
相关产品推荐
相关产品推荐

