背景
需要项目既支持开发环境编译,也支持npm发布,默认package.json文件是开发环境的配置
新建发布的package.json文件
特别注意main、exports、publishConfig、files配置
// package.publish.json
{
"name": "@md/plugin-core",
"version": "2.5.0",
"type": "module",
"author": {
"name": "modo",
"email": "modou@md.com",
"url": ""
},
"main": "./dist/all/md-omni-sdk.js",
"exports": {
".": {
"import": "./dist/all/md-omni-sdk.js"
},
"./im-user-sdk-umd": {
"default": "./dist/im-user-sdk/md-omni-sdk.js"
},
"./im-user-sdk-es": {
"default": "./dist/im-user-sdk/md-omni-sdk-es.js"
},
"./im-agent-sdk-umd": {
"default": "./dist/im-agent-sdk/md-omni-sdk.js"
},
"./im-agent-sdk-es": {
"default": "./dist/im-agent-sdk/md-omni-sdk-es.js"
},
"./im-user-sdk/*": "./dist/im-user-sdk/*",
"./im-agent-sdk/*": "./dist/im-agent-sdk/*"
},
"publishConfig": {
"access": "restricted",
"registry": "https://registry.npmmirror.com/",
"tag": "latest"
},
"files": ["dist"],
"scripts": {
"prepare:publish": "node scripts/prepare-publish.cjs",
"postpublish": "node scripts/restore-dev.cjs"
},
"keywords": ["vite", "typescript"],
"license": "MIT",
"homepage": "http://xxxx/plugin-core",
"repository": {
"type": "git",
"url": "git+http://xxxx/plugin-core.git"
}
}
替换发布文件
const fs = require('fs')
const path = require('path')
console.log('准备发布配置...')
// 读取开发版 package.json
const devPackage = require('../package.json')
// 读取发布版 package.json
const publishPackage = require('../package.publish.json')
// 备份当前的 package.json
fs.copyFileSync(
path.join(__dirname, '../package.json'),
path.join(__dirname, '../package.json.backup')
)
// 更新版本号(如果需要)
publishPackage.version = devPackage.version
// 写入发布版 package.json
fs.writeFileSync(
path.join(__dirname, '../package.json'),
JSON.stringify(publishPackage, null, 2)
)
console.log('✅ 已切换到发布配置')
发布npm包
pnpm publish
还原package文件
const fs = require('fs')
const path = require('path')
console.log('恢复开发配置...')
// 恢复备份的 package.json
const backupPath = path.join(__dirname, '../package.json.backup')
if (fs.existsSync(backupPath)) {
fs.copyFileSync(backupPath, path.join(__dirname, '../package.json'))
fs.unlinkSync(backupPath)
console.log('✅ 已恢复开发配置')
} else {
console.log('⚠️ 未找到备份文件,尝试从 package.publish.json 恢复')
// 如果没有备份,可以从 package.publish.json 创建基础版本
const publishPackage = require('../package.publish.json')
const devPackage = {
name: publishPackage.name,
version: publishPackage.version,
private: true,
scripts: {
'prepare:publish': 'node scripts/prepare-publish.js',
postpublish: 'node scripts/restore-dev.js',
},
devDependencies: {},
}
fs.writeFileSync(
path.join(__dirname, '../package.json'),
JSON.stringify(devPackage, null, 2)
)
console.log('✅ 已创建默认开发配置')
}