@ rollup/ plugin- node- resolve
使用 : 节点解析算法,用于在 node_modules
所需资源
此插件需要一个 长期 节点版本(v14.0.0+)和"滚出"v2.78.0+.
安装
使用 npm :
npm install @rollup/plugin-node-resolve --save-dev
使用量
创建一个 rollup.config.js 配置文件 并导入插件 :
import { nodeResolve } from '@rollup/plugin-node-resolve';
export default {
input: 'src/index.js',
output: {
dir: 'output',
format: 'cjs'
},
plugins: [nodeResolve()]
};
那就打电话 rollup 要么通过 国 际 或 API 密码。 。 。 .
软件包入口
此插件支持来自节点js的软件包切入点特性,该特性在 exports 或者说 imports 字段。 检查 正式文件 了解更多信息,说明如何运作。 这是默认行为。 在这些地区 mainFields 将被使用.
选项
exportConditions
类型 : Array[...String]
默认 : []
Package.json导出字段的附加条件在解析模块时匹配. 默认情况下,此插件将查找 ['default', 'module', 'import'] 解决进口时的条件.
使用时 @rollup/plugin-commonjs v16 或更高, 此插件将使用 ['default', 'module', 'require'] 解决时的条件需要声明.
设置此选项将在默认条件外添加额外条件 。 见 https://nodejs.org/api/packages.html#packages 有条件的 exports 更多信息.
为了得到 解析节点.js的行为,设置为 ['node']。 。 。 .
browser
类型 : Boolean
默认 : false
若为 true,指示插件在 package.json 添加 'browser' 改为 exportConditions 如果它不在场, 浏览器条件为 exports 适用。 若为 false,包文件中的任何浏览器属性都将被忽略。 或者,价值为 'browser' 可添加到两个 mainFields 财务报告和审定财务报表 exportConditions 选项,但此选项优先于 mainFields。 。 。 .
软件包使用时此选项不起作用 软件包条目
moduleDirectories
类型 : Array[...String]
默认 : ['node_modules']
一份目录名称列表, 用于重复查找模块 .
modulePaths
类型 : Array[...String]
默认 : []
用于搜索模块的其他位置的绝对路径列表 . 这类似于设置 NODE_PATH 节点的环境变量。 。 。 .
dedupe
类型 : Array[...String]
默认 : []
一个 Array 模块名称,指示插件将指定的模块强制解析到根 node_modules。如果从依赖区导入了软件包,有助于防止同一软件包被多次捆绑.
dedupe: ['my-package', '@namespace/my-package'];
这会使纯进口产品减少,例如:
import 'my-package';
import '@namespace/my-package';
它将使深度进口减少,例如:
import 'my-package/foo.js';
import '@namespace/my-package/bar.js';
extensions
类型 : Array[...String]
默认 : ['.mjs', '.js', '.json', '.node']
指定插件将操作的文件的扩展名.
jail
类型 : String
默认 : '/'
在指定的路径(如chroot)内锁定模块搜索。 在此路径外定义的模块会被此插件忽略 .
mainFields
类型 : Array[...String]
默认 : ['module', 'main']
有效值 : ['browser', 'jsnext:main', 'module', 'main']
指定要扫描的属性 package.json,用于确定捆绑入点。 物业名称的顺序很重要,因为先得地产被用作已解决的出入口. 如果数组包含 'browser'键/值 package.json browser 属性将被使用.
preferBuiltins
类型 : Boolean | (module: string) => boolean
默认 : true (如果在本地版本上使用内建模块,则警告。) 设定为 true 以禁用警告。)
若为 true,插件将选择内置模块(例如:. fs, (中文(简体) ), path) (中文(简体) ). 若为 false,插件将查找本地安装的同名模块.
或者,您可以在返回布尔值的函数中通过,以确认插件是否应该选择内置模块。 譬如说.
preferBuiltins: (module) => module !== 'punycode';
不治疗 punycode 作为内置模块
modulesOnly
类型 : Boolean
默认 : false
若为 true,检查已解决的文件,以断言它们是ES2015模块.
resolveOnly
类型 : Array[...String|RegExp] | (module: string) => boolean
默认 : null
一个 Array 它指示插件将模块分辨率限制在名称符合数组图案的人. 注意: 不匹配任何模式的模块将被标记为外部模式 .
或者,您可以在返回布尔值的函数中通过,以确认模块是否应当包含.
实例:
resolveOnly: ['batman', /^@batcave\/.*$/]resolveOnly: module => !module.includes('joker')
rootDir
类型 : String
默认 : process.cwd()
指定用于解决模块的根目录。 通常用于解决入点导入,以及解决去重复模块. 在一个单存储器包中执行滚动时有用 .
// Set the root directory to be the parent folder
rootDir: path.join(process.cwd(), '..')
ignoreSideEffectsForRoot
如果你使用 sideEffects 属性在 package.json 中,默认情况下,对根包中的文件尊重此选项。 设定为 true 忽略 sideEffects 根包的配置.
allowExportsFolderMapping
旧节点版本支持导出文件夹的映射
{
"exports": {
"./foo/": "./dist/foo/"
}
}
这与"节点"14被贬值,被"节点"17被去除,相反建议采用"等出口模式"
{
"exports": {
"./foo/*": "./dist/foo/*"
}
}
但是,为了反向兼容性,这个行为仍然通过启用 allowExportsFolderMapping (违约) true) (中文(简体) ).
默认值在将来的主要发行中可能会有变化.
保留符号链接
此插件符合滚动 preserveSymlinks 选项.
使用时使用@ rollup/ plugin- commonjs
由于您节点- 模块文件夹中的大多数软件包可能都是遗留的 CommunityJS 而不是 JavaScript 模块, 您可能需要使用 @ rollup/ plugin- commonjs (英语)数字 :
// rollup.config.js
import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
export default {
input: 'main.js',
output: {
file: 'bundle.js',
format: 'iife',
name: 'MyModule'
},
plugins: [nodeResolve(), commonjs()]
};
解决已建内线( 如 fs(中文(简体) )
默认情况下,此插件会比本地模块更偏好内置,将其标为外置.
见 preferBuiltins。 。 。 .
要提供节点内置的倒接版,请使用类似插件 卷起插孔-节点-填充 设置 preferBuiltins 改为 false例如.
import { nodeResolve } from '@rollup/plugin-node-resolve';
import nodePolyfills from 'rollup-plugin-node-polyfills';
export default ({
input: ...,
plugins: [
nodePolyfills(),
nodeResolve({ preferBuiltins: false })
],
external: builtins,
output: ...
})
解决需要的语句
根据 节点JS模块分辨率 require 语句应使用 require 组合导出字段的条件,而 es 模块应使用 import 条件.
节点解析插件使用 import 默认情况下,您可以选择使用 require 语义学通过向解析函数传递额外选项:
this.resolve(importee, importer, {
skipSelf: true,
custom: { 'node-resolve': { isRequire: true } }
});
解析选项
此插件解决了目标文件中的导入 ID 后 node_modules它会引用 this.resolve 和已解决的ID。 它将在解决方案中通过下列信息:
this.resolve(resolved.id, importer, {
custom: {
'node-resolve': {
resolved, // the object with information from node.js resolve
importee // the original import id
}
}
});
您的插件可以使用 importee 将原始导入映射到已解析文件的信息 node_modules,在插件钩子中,例如 resolveId。 。 。 .
这个 resolved 对象包含已解析的 id,它作为第一个参数被传递。 它也有财产 moduleSideEffects,其中可能包含 npm 值 package.json 字段 sideEffects 或者说 null。 。 。 .