npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

plain-env

v1.4.0

Published

`plain-env` is a framework-agnostic `.env` and `Webpack.DefinePlugin` replacement, making business code cleaner, safer, better support `tree-shaking` and code inspection.

Downloads

21

Readme

plain-env

npm npm type definitions module system file support

plain-env is a framework-agnostic .env and Webpack.DefinePlugin replacement, making business code cleaner, safer, better support tree-shaking and code inspection.

plain-env 是框架无关的 .envWebpack.DefinePlugin 的替代品,让业务代码更干净、更安全、更好的支持 tree-shaking 和代码检查。

为什么是 plain-env

  1. plain-env 的使用与工程框架完全解耦,提供命令行和 Node.js 支持。

    以前通过 Webpack.DefinePlugin 动态注入并替换业务代码中的 process.env.xx 的耦合方式。

    现在只需要 import {xx} from "./config.ts" 即可。

  2. plain-env 通过解析配置声明文件自动生成 TS/JS 文件,通过 import 在业务代码中使用。

    绝佳的隔离了工程环境和业务环境。

    同时保留了注释在 IDE 中的提示。

  3. plain-env 支持自动选择对应部署环境的子配置,拒绝导出一切无用信息,防止误用。

  4. plain-env 支持从 CI/CD 中接受环境变量的注入,避免关键信息配置在代码仓库中有泄漏风险。

  5. TS/JS 的静态化导出有更好的支持类型提示、打包过程的静态错误检查和 tree-shaking

    完全规避掉了前端业务代码中使用 process.env 的缺点。

特性

  • 简单、灵活、易用
  • 框架无关
  • 支持命令行 plain-env ...
  • 自动注入系统环境变量 process.env.xx / --inject
  • 自定义输出环境 --mode
  • 配置项类型的近乎完备支持
  • TS/JS 双运行环境支持
  • 运行时安全、信息安全
  • 保留完整注释

TODO:

  • [x] 通过 import/require 使用
  • [ ] 测试用例
  • [ ] --watch
  • [ ] 多文件类型支持

使用

安装: npm i -D plain-envyarn add -D plain-envpnpm add -D plain-env

CLI

基础用法:

plain-env {config1.yaml}={output-file1.js} {config2.yaml}={output-file2.ts}

配置文件使用 yaml,配置格式参考 ./examples/y-env1.yaml

用例:

  • plain-env examples/y-env1.yaml=examples/y-env1.ts

    自动将 y-env1.yaml 转换为 y-env1.ts,结果见 ./examples/y-env1.ts

  • plain-env examples/y-env1.yaml=examples/y-env1.ts examples/y-env1.yaml=examples/y-env1.js

    多文件支持,自动将 y-env1.yaml 转换为 y-env1.ts,将 y-env1.yaml 转换为 y-env1.js,结果见 examples 文件夹

  • plain-env examples/y-env1.yaml=examples/y-env1.cjs --module cjs

    指定 --module cjsy-env1.yaml 转换为 CommonJS 模块系统的 y-env1.cjs,结果见 ./examples/y-env1.cjs

  • plain-env examples/y-env1.yaml=examples/y-env1.ts --mode dev

    指定 --mode devy-env1.yaml 转换为 y-env1.ts,并过滤存在 dev 异或 * 的子配置。结果见 ./examples/y-env1.ts

--mode

--mode [mode]

指定使用的子配置。如果配置项为 Map 且有对应的子字段或者有 '*',则输出对应子字段的值

例如,对于配置

ENV_TAG:
  dev: 'dev'
  test: 'test'
  pro: 'pro'
VAR_1:
  '*': 123
  pro: 456
PLAIN: 'plain-env'

使用 --mode test 生成的配置为:

export const ENV_TAG = 'test' as const
export const VAR_1 = 123 as const
export const PLAIN = 'plain-env' as const

--module

--module <esm, cjs>

指定输出的 TS/JS 文件的模块系统类型。

  • esm: ES Module
  • cjs: CommonJS

--watch

TODO

-v

查看当前版本

-h

plain-env -h

查看帮助信息

导入使用

TODO

Q&A

支持的数据类型都有哪些?

对于 yaml 配置文件,支持:

  • string
  • number(正负数、浮点数、NaN、Infinity)
  • boolean
  • null
  • Object
  • Array

为什么推荐使用 yaml,而不是 json/.env?

  1. 有更完备的数据类型支持

  2. 有更好的数据层级支持

关于 yaml 的使用,更多信息访问这里: https://eemeli.org/yaml/

构建到不同 mode 时,指定的 output.ts 文件内容总是变化怎么办?

output.ts 添加到 .gitignore 即可