npm

package
v0.0.0-...-ae29a83 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2025 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CommandSet = &cli.Command{
	Name:    "npm",
	Aliases: []string{"n"},
	Usage:   "npm 包管理工具",
	Subcommands: []*cli.Command{
		PinPackageCmd,
	},
}
View Source
var PinPackageCmd = command.NewCommand("pin", "根据 pnpm-lock.yaml 锁定 package.json 依赖版本",
	any(nil),
	command.WithAlias([]string{"p"}),
).AddHandler(
	command.InlineHandler[any](
		func(c *cli.Context, config any) error {
			cwd, err := os.Getwd()
			if err != nil {
				return fmt.Errorf("get cwd: %w", err)
			}

			lockFilePath := path.Join(cwd, "pnpm-lock.yaml")
			if !fileutil.Exists(lockFilePath) {
				return fmt.Errorf("pnpm-lock.yaml not found")
			}

			lockFile, err := os.ReadFile(lockFilePath)
			if err != nil {
				return fmt.Errorf("read pnpm-lock.yaml: %w", err)
			}

			var lockFileSchema PnpmLockYamlSchema
			if err := yaml.Unmarshal(lockFile, &lockFileSchema); err != nil {
				return fmt.Errorf("unmarshal pnpm-lock.yaml: %w", err)
			}

			packageJsonFilePath := path.Join(cwd, "package.json")
			if !fileutil.Exists(packageJsonFilePath) {
				return fmt.Errorf("package.json not found")
			}

			packageJsonFile, err := os.ReadFile(packageJsonFilePath)
			if err != nil {
				return fmt.Errorf("read package.json: %w", err)
			}

			var packageJsonSchema PackageJsonSchema
			if err := json.Unmarshal(packageJsonFile, &packageJsonSchema); err != nil {
				return fmt.Errorf("unmarshal package.json: %w", err)
			}

			installedPackages := lockFileSchema.Importers["."].Dependencies
			for k := range packageJsonSchema.Dependencies {
				packageJsonSchema.Dependencies[k] = formatInstalledVersion(installedPackages[k].Version)
			}

			installedDevPackages := lockFileSchema.Importers["."].DevDependencies
			for k := range packageJsonSchema.DevDependencies {
				packageJsonSchema.DevDependencies[k] = formatInstalledVersion(installedDevPackages[k].Version)
			}

			packageJsonFile, err = json.MarshalIndent(packageJsonSchema, "", "  ")
			if err != nil {
				return fmt.Errorf("marshal package.json: %w", err)
			}

			if err := os.WriteFile(packageJsonFilePath, packageJsonFile, fs.ModePerm); err != nil {
				return fmt.Errorf("write package.json: %w", err)
			}

			log.Info().Str("file", packageJsonFilePath).Msg("更新 package.json")
			return nil
		},
	),
).Create()

Functions

This section is empty.

Types

type PackageJsonSchema

type PackageJsonSchema struct {
	Name            string            `json:"name"`
	Version         string            `json:"version"`
	Private         bool              `json:"private"`
	Type            string            `json:"type"`
	Dependencies    map[string]string `json:"dependencies"`
	DevDependencies map[string]string `json:"devDependencies"`
	Scripts         map[string]string `json:"scripts"`
}

type PnpmLockYamlSchema

type PnpmLockYamlSchema struct {
	LockFileVersion string `yaml:"lockfileVersion"`
	Settings        struct {
		AutoInstallPeers         bool `yaml:"autoInstallPeers"`
		ExcludeLinksFromLockFile bool `yaml:"excludeLinksFromLockFile"`
	}
	Importers map[string]struct {
		Dependencies map[string]struct {
			Specifier string `yaml:"specifier"`
			Version   string `yaml:"version"`
		} `yaml:"dependencies"`
		DevDependencies map[string]struct {
			Specifier string `yaml:"specifier"`
			Version   string `yaml:"version"`
		} `yaml:"devDependencies"`
	}
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL