生成- package-json-webpack-plugin 生成- package-json-webpack-plugin
用来限制内部的依赖性
package.json只有那些被你的代码实际使用.
为什么产生新的 package.json? 吗?
此插件对于您拥有开发/ 测试大型源项目时有用 为各种部署和应用程序将项目捆绑在一起。 如谷歌云函数.
甚至只是捆绑你的普通节点Js服务器代码 以及知道你的 package.json 尽可能的精致
可能是为了下次部署.
我们都知道我们的发展环境会变得有点混乱..
: floppy 磁盘:安装
npm install @dead50f7/generate-package-json-webpack-plugin --save-dev
: 电源 插件: 用法
const basePackage = {
"name": "my-nodejs-module",
"version": "1.0.0",
"main": "./index.js",
"engines": {
"node": ">= 14"
}
}
// inside your webpack configuration
plugins: [new GeneratePackageJsonPlugin(basePackage)],
就是这样 插件将生成一个新的 package.json 文件包含您代码使用的所有依赖性。 这个
检测到的依赖关系的版本直接取自内部模块 node_modules。 。 。 .
不详. 这个基础软件包文件是故意不孕的,作为我们最终输出的基础 package.json- 任何一个
其内部列出的依赖性将被有意设定,并由生成过程作出不同的解释. 见
详情见下文。 。 。 .
重要说明 externals
插件只写输入代码中找到且已标记在 externals
在你的 Webpack 配置中.
这是合乎逻辑的,因为如果一个模块没有被标记为外部模块,它就包含在您最后的网络包包中 因此,不需要安装 以再次依赖部署.
因此,这个插件最好与某种东西结合使用
喜欢 网络包-节点-外部,用于确定节点
模块不包含在您的最终 bundle.js,像这样:
const nodeExternals = require("webpack-node-externals");
// inside your webpack config
externals: [nodeExternals({
whitelist: [/^module-I-want-bundled/],
})],
如您所见,您可以添加您故意添加的模块 对 要使用 whitelist 选项.
在代码外添加模块( 构建模块等)
或故意设置捆绑依赖的不同版本,或作为不同的依赖类型(peerDependencies(例如)
简单地把这些依赖性放在 basePackageValues 代表基数的对象
新设 package.json 将创建.
保留版本编号字符串为空( E)"")让插件解决版本。 要使用一个版本,即
不同,请在此设置版本字符串.
const basePackageValues = {
"name": "my-nodejs-module",
"version": "1.0.0",
"main": "./index.js",
"scripts": {
"start": "cross-var node --max-old-space-size=$NODE_JS_MAX_OLD_SPACE_SIZE ./server.js"
}
"engines": {
"node": ">= 14"
},
devDependencies: {
"cross-var": "^1.1.0",
"cross-env": "",
},
peerDependencies: {
"react" : "",
}
}
在这个例子中, cross-var 已故意设定为版本 ^1.1.0,无论实际安装什么
它会使用这个版本.
cross-env 但是,它的版本号将会从 node_modules。 。 。 .
这对增加运行时需要但未在您的网页包中找到的依赖关系非常有用
捆绑 例如 cross-var 将环境变量注入跨平台运行的脚本
亲切的方式.
需要注意的是,同一行为适用于所有类型的依赖关系(dependencies, (中文(简体) ), devDependencies 财务报告和审定财务报表
peerDependencies) (中文(简体) ). 在这个例子中 react 将具有与 cross-env,而不是被放置
内部 dependencies 列表中,它将被放在 peerDependencies 列表中选择一个选项.
简单 API
new GeneratePackageJsonPlugin(basePackage, options)
第一个论点: basePackage
(单位:千美元) 需求 )您应该为您的 package.json 这里的文件。 例如:
const basePackage = {
"name": "my-nodejs-module",
"version": "1.0.0",
"main": "./bundle.js",
"engines": {
"node": ">= 14"
}
}
这将与生成的合并 "dependencies": { ... } 构成最终 package.json 分发文件.
第二个论点: options
(单位:千美元) 可选 (中文(简体) )
具有下列结构的天体:
{
debug: true,
useInstalledVersions: true,
resolveContextPaths: [__dirname],
sourcePackageFilenames: [
join(__dirname, "../other-workspace/package.json"),
],
forceWebpackVersion: "webpack5",
excludeDependencies: ["aws-sdk"],
}
备选方案:
debug (默认 : 虚假: 启用以显示一些关于插件如何查找依赖性和
创建新 package.json。 。 。 .
useInstalledVersions (默认 : 真实: 解析节点模块,并使用安装在您的
环境。 这对锁定生产部署的版本很有用. 这是默认和最简单的使用方式
插件, 如果无法启用, 您应该提供 package.json 文件 in sourcePackageFilenames 从
该插件将源模块版本.
resolveContextPaths: 向上仰望的内部解析行为的背景路径 node_modules 要拉动
这些版本来自。 当前目录是默认的, 但是如果您有单列, 则会有边框定义
多种情况可能是有用的.
sourcePackageFilenames : 如果默认 useInstalledVersions 选项已设置,此选项仅用作最终
寻找版本的后退 。 这对单重置和代码中不依赖的工程有用
仅从单个背景项目定义。 如果您在多个工程或“ 工作空间” 之间共享代码以捆绑
您可能想要设置此选项.
forceWebpackVersion (可选 - 默认情况下, 插件将尝试检测版本) : 这可定为:
webpack4 或者说 webpack5。如果您使用的 Webpack 版本低于 4 - 那么设定为 webpack4。这可能有助于
使用Webpack的民众.
excludeDependencies : 您可以在此设置您绝对不希望输出的任何依赖性 package.json 文档,
即使它们碰巧被你的代码使用。 这在某些边缘情况下是有用的,例如执行环境
自动为您提供这些依赖关系,无需安装.
:mag:需要注意的事情
你应该记得设置 "main": "./index.js" 转到正确的文件名( 可能是输出捆绑文件)
从同一 Webpack 任务开始),并 / 或正确设置您将运行在 Node.js 服务器部署上的起始脚本
以 npm start您可以在 basePackage 对象通过插件,例如 :
const basePackage = {
"name": "my-nodejs-module",
"version": "1.0.0",
"main": "./bundle.js",
"scripts": {
"start": "node ./bundle.js"
},
"engines": {
"node": ">= 14"
}
}