📚 论文级功能实现: - ✅ KaTeX数学公式渲染系统 (内联$...1411...1411) - ✅ 高级代码高亮 (行号、标题、语法着色) - ✅ PWA渐进式Web应用支持 - ✅ 多语言代码支持 (20+编程语言) - ✅ 代码行标注系统 (错误/成功/警告/高亮) 🧮 数学公式系统: - LaTeX语法完整支持 - 数学宏定义 (\RR, \NN, \ZZ, \QQ, \CC等) - 复杂公式渲染 (矩阵、积分、求和、分数) - 响应式数学表达式 - 黑暗模式数学公式适配 💻 高级代码展示: - 代码块标题显示 - 行号自动生成 - 语法高亮增强 - 多行高亮标注 - 错误/成功/警告行标记 - 20+编程语言支持 🔧 企业级插件: - @docusaurus/plugin-pwa (离线支持) - rehype-katex (数学公式) - remark-math (数学语法) - remark-gfm (GitHub风格Markdown) - prism-react-renderer (代码高亮) 📊 算法示例升级: - Transformer深度学习模型 - 多头注意力机制实现 - 完整的神经网络架构 - 专业文档注释 - 类型提示和错误处理 🎨 视觉优化: - 数学公式背景框 - 代码行高亮动画 - 专业配色方案 - 渐变边框效果 - 响应式设计适配 📱 PWA功能: - 离线访问支持 - 应用图标配置 - 清单文件完整 - 主题色统一 - 安装提示优化 🚀 性能优化: - 图片质量提升至85% - 代码分割优化 - 字体预加载 - CSS变量系统 - GPU加速渲染 ✨ 用户体验: - 论文级排版标准 - 学术引用格式 - 专业视觉层次 - 无障碍访问支持 - 多设备完美适配
238 lines
5.7 KiB
Markdown
Executable File
238 lines
5.7 KiB
Markdown
Executable File
[npm]: https://img.shields.io/npm/v/@rollup/pluginutils
|
|
[npm-url]: https://www.npmjs.com/package/@rollup/pluginutils
|
|
[size]: https://packagephobia.now.sh/badge?p=@rollup/pluginutils
|
|
[size-url]: https://packagephobia.now.sh/result?p=@rollup/pluginutils
|
|
|
|
[![npm][npm]][npm-url]
|
|
[![size][size]][size-url]
|
|
[](https://liberamanifesto.com)
|
|
|
|
# @rollup/pluginutils
|
|
|
|
A set of utility functions commonly used by 🍣 Rollup plugins.
|
|
|
|
## Requirements
|
|
|
|
This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v8.0.0+) and Rollup v1.20.0+.
|
|
|
|
## Install
|
|
|
|
Using npm:
|
|
|
|
```console
|
|
npm install @rollup/pluginutils --save-dev
|
|
```
|
|
|
|
## Usage
|
|
|
|
```js
|
|
import utils from '@rollup/pluginutils';
|
|
//...
|
|
```
|
|
|
|
## API
|
|
|
|
Available utility functions are listed below:
|
|
|
|
_Note: Parameter names immediately followed by a `?` indicate that the parameter is optional._
|
|
|
|
### addExtension
|
|
|
|
Adds an extension to a module ID if one does not exist.
|
|
|
|
Parameters: `(filename: String, ext?: String)`<br>
|
|
Returns: `String`
|
|
|
|
```js
|
|
import { addExtension } from '@rollup/pluginutils';
|
|
|
|
export default function myPlugin(options = {}) {
|
|
return {
|
|
resolveId(code, id) {
|
|
// only adds an extension if there isn't one already
|
|
id = addExtension(id); // `foo` -> `foo.js`, `foo.js -> foo.js`
|
|
id = addExtension(id, '.myext'); // `foo` -> `foo.myext`, `foo.js -> `foo.js`
|
|
}
|
|
};
|
|
}
|
|
```
|
|
|
|
### attachScopes
|
|
|
|
Attaches `Scope` objects to the relevant nodes of an AST. Each `Scope` object has a `scope.contains(name)` method that returns `true` if a given name is defined in the current scope or a parent scope.
|
|
|
|
Parameters: `(ast: Node, propertyName?: String)`<br>
|
|
Returns: `Object`
|
|
|
|
See [rollup-plugin-inject](https://github.com/rollup/rollup-plugin-inject) or [rollup-plugin-commonjs](https://github.com/rollup/rollup-plugin-commonjs) for an example of usage.
|
|
|
|
```js
|
|
import { attachScopes } from '@rollup/pluginutils';
|
|
import { walk } from 'estree-walker';
|
|
|
|
export default function myPlugin(options = {}) {
|
|
return {
|
|
transform(code) {
|
|
const ast = this.parse(code);
|
|
|
|
let scope = attachScopes(ast, 'scope');
|
|
|
|
walk(ast, {
|
|
enter(node) {
|
|
if (node.scope) scope = node.scope;
|
|
|
|
if (!scope.contains('foo')) {
|
|
// `foo` is not defined, so if we encounter it,
|
|
// we assume it's a global
|
|
}
|
|
},
|
|
leave(node) {
|
|
if (node.scope) scope = scope.parent;
|
|
}
|
|
});
|
|
}
|
|
};
|
|
}
|
|
```
|
|
|
|
### createFilter
|
|
|
|
Constructs a filter function which can be used to determine whether or not certain modules should be operated upon.
|
|
|
|
Parameters: `(include?: <minmatch>, exclude?: <minmatch>, options?: Object)`<br>
|
|
Returns: `String`
|
|
|
|
#### `include` and `exclude`
|
|
|
|
Type: `String | RegExp | Array[...String|RegExp]`<br>
|
|
|
|
A valid [`minimatch`](https://www.npmjs.com/package/minimatch) pattern, or array of patterns. If `options.include` is omitted or has zero length, filter will return `true` by default. Otherwise, an ID must match one or more of the `minimatch` patterns, and must not match any of the `options.exclude` patterns.
|
|
|
|
#### `options`
|
|
|
|
##### `resolve`
|
|
|
|
Type: `String | Boolean | null`
|
|
|
|
Optionally resolves the patterns against a directory other than `process.cwd()`. If a `String` is specified, then the value will be used as the base directory. Relative paths will be resolved against `process.cwd()` first. If `false`, then the patterns will not be resolved against any directory. This can be useful if you want to create a filter for virtual module names.
|
|
|
|
#### Usage
|
|
|
|
```js
|
|
import { createFilter } from '@rollup/pluginutils';
|
|
|
|
export default function myPlugin(options = {}) {
|
|
// assume that the myPlugin accepts options of `options.include` and `options.exclude`
|
|
var filter = createFilter(options.include, options.exclude, {
|
|
resolve: '/my/base/dir'
|
|
});
|
|
|
|
return {
|
|
transform(code, id) {
|
|
if (!filter(id)) return;
|
|
|
|
// proceed with the transformation...
|
|
}
|
|
};
|
|
}
|
|
```
|
|
|
|
### dataToEsm
|
|
|
|
Transforms objects into tree-shakable ES Module imports.
|
|
|
|
Parameters: `(data: Object)`<br>
|
|
Returns: `String`
|
|
|
|
#### `data`
|
|
|
|
Type: `Object`
|
|
|
|
An object to transform into an ES module.
|
|
|
|
#### Usage
|
|
|
|
```js
|
|
import { dataToEsm } from '@rollup/pluginutils';
|
|
|
|
const esModuleSource = dataToEsm(
|
|
{
|
|
custom: 'data',
|
|
to: ['treeshake']
|
|
},
|
|
{
|
|
compact: false,
|
|
indent: '\t',
|
|
preferConst: false,
|
|
objectShorthand: false,
|
|
namedExports: true
|
|
}
|
|
);
|
|
/*
|
|
Outputs the string ES module source:
|
|
export const custom = 'data';
|
|
export const to = ['treeshake'];
|
|
export default { custom, to };
|
|
*/
|
|
```
|
|
|
|
### extractAssignedNames
|
|
|
|
Extracts the names of all assignment targets based upon specified patterns.
|
|
|
|
Parameters: `(param: Node)`<br>
|
|
Returns: `Array[...String]`
|
|
|
|
#### `param`
|
|
|
|
Type: `Node`
|
|
|
|
An `acorn` AST Node.
|
|
|
|
#### Usage
|
|
|
|
```js
|
|
import { extractAssignedNames } from '@rollup/pluginutils';
|
|
import { walk } from 'estree-walker';
|
|
|
|
export default function myPlugin(options = {}) {
|
|
return {
|
|
transform(code) {
|
|
const ast = this.parse(code);
|
|
|
|
walk(ast, {
|
|
enter(node) {
|
|
if (node.type === 'VariableDeclarator') {
|
|
const declaredNames = extractAssignedNames(node.id);
|
|
// do something with the declared names
|
|
// e.g. for `const {x, y: z} = ... => declaredNames = ['x', 'z']
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
}
|
|
```
|
|
|
|
### makeLegalIdentifier
|
|
|
|
Constructs a bundle-safe identifier from a `String`.
|
|
|
|
Parameters: `(str: String)`<br>
|
|
Returns: `String`
|
|
|
|
#### Usage
|
|
|
|
```js
|
|
import { makeLegalIdentifier } from '@rollup/pluginutils';
|
|
|
|
makeLegalIdentifier('foo-bar'); // 'foo_bar'
|
|
makeLegalIdentifier('typeof'); // '_typeof'
|
|
```
|
|
|
|
## Meta
|
|
|
|
[CONTRIBUTING](/.github/CONTRIBUTING.md)
|
|
|
|
[LICENSE (MIT)](/LICENSE)
|