Node.js 从React Redux(创建React应用程序)中的package.json获取版本号
OP EDIT:如果其他人遇到此问题:应用程序是使用创建的,这将限制导入到src文件夹中。但是,如果您使用它,您可以访问package.json。 我正在尝试从我的应用程序中的package.json获取版本号Node.js 从React Redux(创建React应用程序)中的package.json获取版本号,node.js,reactjs,npm,react-redux,create-react-app,Node.js,Reactjs,Npm,React Redux,Create React App,OP EDIT:如果其他人遇到此问题:应用程序是使用创建的,这将限制导入到src文件夹中。但是,如果您使用它,您可以访问package.json。 我正在尝试从我的应用程序中的package.json获取版本号 我已经尝试过了,但是没有一个成功,因为我无法从src文件夹之外访问package.json(可能是因为React,我是新手)。将package.json移动到src意味着我无法从根文件夹运行npm安装,npm版本次要,以及npm运行构建。我尝试过使用process.env.npm\u p
我已经尝试过了,但是没有一个成功,因为我无法从src文件夹之外访问package.json(可能是因为React,我是新手)。将package.json移动到src意味着我无法从根文件夹运行
npm安装
,npm版本次要
,以及npm运行构建
。我尝试过使用process.env.npm\u package\u版本
,但结果是未定义
我使用的是Jenkins,我还没有设置它来推动提交,但我唯一的想法是从GitLab中的标签获取版本,但我不知道如何做到这一点,这会给repo增加不必要的依赖性,所以我真的想找到一个替代方案
编辑:
我的文件结构如下:
--> RootAppFolder
|--> build
|--> node_modules
|--> public
|--> src
|--> Components
|--> Root.js
|
|--> package.json
因此,要从Root.js访问package.json,我必须从'/../../../package.json'导入packageJson,然后出现以下错误:
./src/components/Root.js
未找到模块:您试图导入
../../../package.json,不属于项目src/
目录不支持src/之外的相对导入。你可以
将其移动到src/内,或从项目的
节点\模块/
试试这个
// in package.json
"version": "1.0.0"
// in index.js
import packageJson from '../package.json';
console.log(packageJson.version); // "1.0.0"
根据您的编辑,我建议您尝试:
从“/package.json”导入packageJson;
您还可以尝试创建符号链接:
从项目根目录中。
cd-src;ln-s../package.json package.alias.json
列出src目录的内容,您将看到符号链接
ls
#=>package.alias.json->../package.json
添加.alias
有助于减少在查看此信息时对他人和未来自我的“魔力”。此外,它还可以帮助文本编辑器将它们分开。以后你会感谢我的。只需确保将JS代码更新为从/package.alias.json
导入,而不是从/package.json
导入即可
另外,请看一下这个问题:
解决此问题时,无需将
package.json导入createreact应用程序
需要:创建react应用程序的
.env
REACT_APP_VERSION=$npm_package_version
REACT_APP_NAME=$npm_package_name
console.log(`${process.env.REACT_APP_NAME} ${process.env.REACT_APP_VERSION}`)
index.js
REACT_APP_VERSION=$npm_package_version
REACT_APP_NAME=$npm_package_name
console.log(`${process.env.REACT_APP_NAME} ${process.env.REACT_APP_VERSION}`)
注意:可以访问该版本(以及许多其他版本)
注2:只有在您之后才会选择对.env
文件所做的更改。我认为通过“导入”或“要求”包获取版本是不正确的。
您可以在package.json中添加脚本
"start": "REACT_APP_VERSION=$npm_package_version react-app-script start",
您可以通过任何js文件中的“process.env.REACT\u APP\u VERSION”获得它
它也适用于构建脚本,如下所示:
"build": "REACT_APP_VERSION=$npm_package_version react-app-script build",
import package.json
一般来说,导入package.json
并不好。原因:安全性和捆绑包大小问题
是的,对于从“../package.json”
导入包json”和从“../package.json”导入{version},最新的网页包(默认配置)+ES6import
会进行树抖动(即只包含的“version”
值,而不是整个package.json
)。但如果您使用CommonJS(require()
),或者更改了您的网页包配置,或者使用了另一个bundler/transpiler,则不能保证这一点。依靠bundler的树抖动来隐藏敏感数据是很奇怪的。如果您坚持导入package.json
,但不希望整个package.json
公开,则可能需要添加一些生成后检查,以确保删除package.json
中的其他值
然而,对于那些package.json
毕竟是公开的开源项目,这里的安全问题仍然是理论上的。如果安全性和捆绑包大小都没有问题,或者,不保证的树抖动对您来说已经足够好了,那么继续)
环境署署长
.env
方法,如果有效,那么它是好的,但是如果您不使用create react app
,您可能需要安装dotenv
并进行一些额外的配置。还有一个小问题:不建议提交.env
文件(and),但如果使用.env
方法,看起来您必须提交该文件,因为它可能对您的程序的运行至关重要
最佳实践(可论证)
(这主要不是针对create react app
,但您仍然可以使用或在cra中配置webpack
)
如果使用网页
,则:
您现在可以在前端程序(开发或生产)中使用console.log(process.env.VERSION)
(您可以简单地使用VERSION
而不是process.env.VERSION
,但它通常需要额外的配置来满足linters:addglobals:{VERSION:'readonly'}
中的.eslintrc
();add声明变量VERSION:string;
中的.d.ts
文件以用于TypeScript)
虽然它是“npm\u-package\u版本”,但它也适用于纱线。给你
其他捆绑包可能也有类似的插件,例如。您是否也尝试过es6版本?“我无法从src文件夹外访问package.json”——您能解释一下吗?如果可以访问package.json
,则可以轻松检索版本号。@kenfire你是什么意思?我对ES6不是很熟悉。@shaochuancs我编辑过解释。将package.json移动到src文件夹中可以获得版本,但是我无法运行任何npm命令来实际构建和运行应用。@shaochuancs是的,结果表明应用程序是使用react create app创建的