nodejs学习之Rollup

官网

https://github.com/rollup/rollup
英文文档
中文文档

是什么

Rollup 是一个用于 JavaScript 的模块打包工具,它将小的代码片段编译成更大、更复杂的代码,例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式,而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许你自由无缝地组合你最喜欢的库中最有用的个别函数。这在未来将在所有场景原生支持,但 Rollup 让你今天就可以开始这样做。

使用

新建文件夹nodejslibstu02,执行如下命令

pnpm init
pnpm add -D rollup

新建rollup.config.mjs

export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'iife',//iife下需要指定namename: 'bundle',},
};

src下新建foo.js

export default 'hello world!';

src下新建index.js

import foo from './foo.js';
export default function () {console.log(foo);
}

修改package.json

"type": "module",
"scripts": {"build": "rollup --config"
},

执行pnpm run build,打包结果如下
在这里插入图片描述
在这里插入图片描述
这个代码是直接可以在js中使用的

常用参数

input

该选项用于指定 bundle 的入口文件(例如,你的 main.js,app.js 或 index.js 文件)。如果值为一个入口文件的数组或一个将名称映射到入口文件的对象,那么它们将被打包到单独的输出 chunks。除非使用 output.file 选项,否则生成的 chunk 名称将遵循 output.entryFileNames 选项设置。当该选项的值为对象形式时,对象的属性名将作为文件名中的 [name],而对于值为数组形式,数组的值将作为入口文件名。
string | string[] | { [entryAlias: string]: string }

input: 'src/index.js',
input: ['src/index.js','src/index2.js'],

output

输出结果配置
MaybePromise<OutputPlugin | NullValue | false | OutputPluginOption[]>

output:{file:'bundle.js', // 输出文件format: 'cjs,  //  6种输出格式:amd /  es6 / iife / umd / cjs / systemname:'A',  //当format为iife和umd时必须提供,将作为全局变量挂在window(浏览器环境)下:window.A=...sourcemap:true  //生成bundle.map.js文件,方便调试
}

plugins

各种插件使用的配置
MaybePromise<Plugin | NullValue | false | InputPluginOption[]>

plugins: [resolve(),commonjs(),isProduction && (await import('@rollup/plugin-terser')).default()
],

external

该选项用于匹配需要排除在 bundle 外部的模块,它的值可以是一个接收模块 id 参数并返回 true (表示外部依赖)或 false (表示非外部依赖)的函数,也可以是一个模块 ID 数组或者正则表达式。除此之外,它还可以只是单个的模块 ID 或正则表达式。被匹配的模块 ID 应该满足以下条件之一:

  • 外部依赖的名称,需要和引入语句中写法完全一致。例如,如果想标记 import “dependency.js” 为外部依赖,就需要使用 “dependency.js” 作为模块 ID;而如果要标记 import “dependency” 为外部依赖,则使用 “dependency”。
  • 解析过的模块 ID(如文件的绝对路径)。
    (string | RegExp)[]| RegExp| string| (id: string, parentId: string, isResolved: boolean) => boolean
external:['lodash'] //告诉rollup不要将此lodash打包,而作为外部依赖

global

该选项用于在 umd / iife bundle 中,使用 id: variableName 键值对指定外部依赖。
{ [name: string]: string } | ((name: string) => string)
例如,在这样的情况下

import $ from 'jquery';//我们需要告诉 Rollup jquery 是外部依赖,jquery 模块的 ID 为全局变量 $// rollup.config.mjs
export default {external: ['jquery'],output: {format: 'iife',name: 'MyBundle',globals: {jquery: '$'}}
};

CommonJS:适用于Node.js环境的输出,使用CommonJS模块化规范。简称cjs
ES Module:可以在现代浏览器端及Node.js中使用的输出,使用ESM模块化规范。简称es
UMD:兼容浏览器端及Node.js环境的输出,可以通过script标签导入,同时也支持CommonJS和AMD规范。通用模块定义规范,同时支持 amd,cjs 和 iife,简称umd
AMD:适用于使用AMD规范载入模块的环境,比如require.js。简称amd
SystemJS:适用于使用SystemJS载入模块的环境,比如jspm。简称system
iife:普通的全局变量方式导出,适合浏览器端,可以通过script标签导入。简称iife

插件

https://github.com/rollup/plugins/tree/master

创建压缩文件

安装插件

pnpm add -D @rollup/plugin-terser

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';export default {input: 'src/index.js',output: [{file: 'dist/bundle.js',format: 'iife',name: 'bundle',sourcemap: true,},{file: 'dist/bundle.min.js',format: 'iife',name: 'bundle',plugins: [terser()]}],
};

执行打包命令,如果放在最外层的plugins目录下就是都压缩
在这里插入图片描述

找到外部模块打包

@rollup/plugin-node-resolve 插件可以让 Rollup 找到外部模块,在 node_modules 中查找并捆绑第三方依赖项

pnpm add -D @rollup/plugin-node-resolve

安装一个jquery

pnpm add -D jquery

修改index.js

import foo from './foo.js';
import jQuery from 'jquery';function testJquery(){jQuery(function (){console.log('juqery加载完成')})
}
testJquery();
export default function () {console.log(foo);
}

修改rollup.config.mjs

//import resolve from '@rollup/plugin-node-resolve';
import { nodeResolve } from '@rollup/plugin-node-resolve';export default {// 其他省略//plugins:[resolve()]plugins:[nodeResolve()]
};

如果配有配置plugins打包还是原来的大小只有自己写的代码,配置好resolve插件之后打包如下
在这里插入图片描述
由于 node_modules 文件夹中的大多数软件包可能是传统的 CommonJS 而非 JavaScript 模块,因此可能需要使用 @rollup/plugin-commonjs:

pnpm add -D @rollup/plugin-commonjs

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';export default {input: 'src/index.js',output: [{file: 'dist/bundle.js',format: 'umd',name: 'bundle',sourcemap: true,},{file: 'dist/bundle.min.js',format: 'umd',name: 'bundle',plugins: [terser()]}],plugins:[nodeResolve(),commonjs()]
};

打包成功体积变大了
在这里插入图片描述

请注意,大多数情况下,@rollup/plugin-commonjs 应该放在转换模块的其他插件之前 - 这是为了防止其他插件对 CommonJS 检测产生影响。一个例外是 Babel 插件,如果你使用它,请将它放在 commonjs 插件之前。

代码分割

代码分割是指有些情况下 Rollup 会自动将代码拆分成块,例如动态加载或多个入口点,还有一种方法可以显式地告诉 Rollup 将哪些模块拆分成单独的块,这是通过 output.manualChunks 选项实现的。
要使用代码分割功能实现惰性动态加载(其中某些导入的模块仅在执行函数后加载),我们返回到原始示例,并修改 src/main.js,以动态加载 src/foo.js 而不是静态加载:
修改index.js

// export default function () {
//     console.log(foo);
// }
//上面代码是原来的
export default function () {import('./foo.js').then(({ default: foo }) => console.log(foo));
}

UMD and IIFE不支持分包打包,所以需要修改为cjs,然后不能使用file,而是使用dir,修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';export default {input: 'src/index.js',output: [{format: 'cjs',name: 'bundle',sourcemap: true,dir: 'dist/bundle',}],plugins:[terser(),nodeResolve(),commonjs()]
};

在这里插入图片描述
src下新建index2.js

export default function () {import('./foo.js').then(({ default: foo }) => console.log(foo));
}

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';export default {input: ['src/index.js',"src/index2.js"],output: [{format: 'cjs',name: 'bundle',sourcemap: true,dir: 'dist/bundle',}],plugins:[terser(),nodeResolve(),commonjs()]
};

在这里插入图片描述
只生成了一个foo

Babel

为了正确解析我们的模块并使其与旧版浏览器兼容,我们应该包括babel来编译输出。许多开发人员在他们的项目中使用 Babel ,以便他们可以使用未被浏览器和 Node.js 支持的将来版本的 JavaScript 特性。
https://www.babeljs.cn/
https://babeljs.io/

pnpm add -D @rollup/plugin-babel
pnpm add -D @babel/core
pnpm add -D @babel/preset-env

新建babel.config.mjs

export default {presets: [['@babel/preset-env',{//是否忽略browserslistrc配置ignoreBrowserslistConfig: false,// 使用 "loose" 模式编译 ES2015+ 中的代码,允许生成与严格模式代码不完全相同的代码loose: true,//启用针对已知 Bug 的修复程序bugfixes: true,//禁止转换为其他类型的模块modules: false,//排除对typeof Symbol 表达式转换,因为目前的环境已经支持 Symbol 类型exclude: ['transform-typeof-symbol']}]]
}

修改rollup.config.mjs

import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';export default {input: ['src/index.js'],output: [{file:"dist/bundle.js",format: 'umd',name: 'bundle',sourcemap: true,}],plugins: [nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),]
};

修改index.js

const square = n => n * n;
console.log(square(10))

打包成功查看结果,可以看到将匿名函数改成function方式了
在这里插入图片描述

避免打包第三方库

如果你不想第三方库被打包进来,而可以在外面引入,配合使用的话,可以在rollup.config.js中配置external
修改index.js

import foo from './foo.js';
import $ from 'jquery';function testJquery(){$(function (){console.log('juqery加载完成')})
}
testJquery();
function aaa() {console.log(foo);
}
aaa();
const square = n => n * n;
console.log(square(10))

执行打包,可以看到把jQuery也打包进来了
在这里插入图片描述
修改rollup.config.mjs,主要增加external和output下的globals

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';export default {input: ['src/index.js'],output: [{file:"dist/bundle.js",format: 'umd',name: 'bundle',sourcemap: true,globals: {jquery: '$'}}],plugins: [//terser(),nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),],external:['jquery']
};

再次打包可以看到没有jQuery包的代码了
在这里插入图片描述
这样在使用的时候我们只需要在浏览器中自己引入jquery即可

配置css

在这里插入图片描述
安装postcss插件

pnpm add -D rollup-plugin-postcss

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss'export default {input: ['src/index.js'],output: [{file:"dist/bundle.js",format: 'umd',name: 'bundle',sourcemap: true,globals: {jquery: '$'}}],plugins: [//terser(),nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),postcss()],external:['jquery']
};

src下新建css文件夹,该文件夹下新建index.css

body{background: #ccc;
}

执行打包
在这里插入图片描述
css自动加浏览器前缀以及将css和js分开

pnpm add -D autoprefixer

修改index.css

@keyframes fadeIn {0% {opacity: 0;}100% {opacity: 1;}
}body {background: #ccc;animation-name: fadeIn;
}.autoplacement-example {display: grid;grid-template-columns: 1fr 1fr;grid-template-rows: auto auto;grid-gap: 20px;
}::placeholder {color: gray;
}

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss'
import css from 'rollup-plugin-css-only'
import autoprefixer from "autoprefixer";export default {input: ['src/index.js'],output: [{file:"dist/bundle.js",format: 'umd',//assetFileNames: 'assets/[name]-[hash][extname]',name: 'bundle',sourcemap: true,globals: {jquery: '$'}}],plugins: [//terser(),nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),postcss({extract: true, // 是否将CSS抽离成单独的文件sourceMap: true, // 是否生成 sourceMapplugins: [autoprefixer({// Autoprefixer 配置overrideBrowserslist: ["last 2 Chrome versions","> 1%","Firefox ESR","IE 9-11"],grid: true // 启用 CSS Grid 的自动前缀})],minimize: false, // 压缩 CSSextensions: ['.css'] // 处理的文件扩展名}),// css({//     output: 'bundle.css'// })],external:['jquery']
};

打包
在这里插入图片描述

另外一种将css和js分开的方法

pnpm add -D rollup-plugin-css-only

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss'
import css from 'rollup-plugin-css-only'export default {input: ['src/index.js'],output: [{file:"dist/bundle.js",format: 'umd',//assetFileNames: 'assets/[name]-[hash][extname]',name: 'bundle',sourcemap: true,globals: {jquery: '$'}}],plugins: [//terser(),nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),//postcss(),css({output: 'bundle.css'})],external:['jquery']
};

打包之后js中就没有css文件了
在这里插入图片描述

配置scss

pnpm add -D rollup-plugin-sass
pnpm add -D postcss

https://www.npmjs.com/package/rollup-plugin-sass
src下新建scss文件夹,新建index.scss

$font-size: 14px;
$link-color:#ff0;::placeholder {color: gray;
}
.test{font-size: $font-size;a{color: $link-color;}
}

修改index.js

import foo from './foo.js';
import $ from 'jquery';
import "./css/index.css"
import './scss/index.scss'function testJquery(){$(function (){console.log('juqery加载完成')})
}
testJquery();
function aaa() {console.log(foo);
}
aaa();
const square = n => n * n;
console.log(square(10))

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss'
import css from 'rollup-plugin-css-only'
import autoprefixer from "autoprefixer";
import sass from 'rollup-plugin-sass';
import postcss2 from 'postcss';export default {input: ['src/index.js'],output: [{file:"dist/bundle.js",format: 'umd',//assetFileNames: 'assets/[name]-[hash][extname]',name: 'bundle',sourcemap: true,globals: {jquery: '$'}}],plugins: [//terser(),nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),postcss({extract: true, // 是否将CSS抽离成单独的文件sourceMap: true, // 是否生成 sourceMapplugins: [autoprefixer({// Autoprefixer 配置overrideBrowserslist: ["last 2 Chrome versions","> 1%","Firefox ESR","IE 9-11"],grid: false // 不启用 CSS Grid 的自动前缀})],minimize: false, // 压缩 CSSextensions: ['.css'], // 处理的文件扩展名inject: false, // 防止 Rollup 将 CSS 注入到 JavaScript 中}),sass({// sass 插件的配置output: 'dist/bundle2.css', // 输出 CSS 文件的路径processor:css => postcss2([autoprefixer({// Autoprefixer 配置overrideBrowserslist: ["last 2 Chrome versions","> 1%","Firefox ESR","IE 9-11"],grid: false // 不启用 CSS Grid 的自动前缀})]).process(css).then(result => result.css)}),// css({//     output: 'bundle.css'// })],external:['jquery']
};

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rollup-plugin-postcss也可以处理scss
在这里插入图片描述

配置typescript

pnpm add -D @rollup/plugin-typescript --registry http://registry.npm.taobao.org
# pnpm add -D rollup-plugin-typescript2 --registry http://registry.npm.taobao.org
pnpm add -D tslib typescript --registry http://registry.npm.taobao.org

src下新建Greeter.ts

class Greeter {greeter: string;constructor(message: string) {this.greeter = message}greet() {return 'hello ts';}
}export default Greeter

src下新建hello.ts

import Greeter from "./Greeter";const a = new Greeter('ss');
a.greet();

修改index.js

import foo from './foo.js';
import $ from 'jquery';
import "./css/index.css"
import './scss/index.scss'
import './hello.js'function testJquery(){$(function (){console.log('juqery加载完成')})
}
testJquery();
function aaa() {console.log(foo);
}
aaa();
const square = n => n * n;
console.log(square(10));

修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss'
import css from 'rollup-plugin-css-only'
import autoprefixer from "autoprefixer";
import sass from 'rollup-plugin-sass';
import postcss2 from 'postcss';
import typescript from '@rollup/plugin-typescript';export default {input: ['src/index.js'],output: [{file: "dist/bundle.js",format: 'umd',//assetFileNames: 'assets/[name]-[hash][extname]',name: 'bundle',sourcemap: true,//dir: 'dist/bundle',globals: {jquery: '$'}}],plugins: [typescript({compilerOptions: {lib: ["es5", "es6", "dom"],target: "es5"},exclude: "node_modules/**",}),//terser(),nodeResolve(),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),postcss({extract: true, // 是否将CSS抽离成单独的文件sourceMap: true, // 是否生成 sourceMapplugins: [autoprefixer({// Autoprefixer 配置overrideBrowserslist: ["last 2 Chrome versions","> 1%","Firefox ESR","IE 9-11"],grid: false // 不启用 CSS Grid 的自动前缀})],minimize: false, // 压缩 CSSextensions: ['.css'], // 处理的文件扩展名inject: false, // 防止 Rollup 将 CSS 注入到 JavaScript 中}),// sass({//     // sass 插件的配置//     output: 'dist/bundle2.css', // 输出 CSS 文件的路径//     processor:css => postcss2([autoprefixer({//         // Autoprefixer 配置//         overrideBrowserslist: [//             "last 2 Chrome versions",//             "> 1%",//             "Firefox ESR",//             "IE 9-11"//         ],//         grid: false // 不启用 CSS Grid 的自动前缀//     })])//         .process(css)//         .then(result => result.css)// }),// css({//     output: 'bundle.css'// })],external: ['jquery']
};

打包
在这里插入图片描述

去除头部

可用于在生成最终捆绑包之前从模块文件中删除横幅(例如许可证标头)。

pnpm add -D rollup-plugin-strip-banner --registry http://registry.npm.taobao.org

修改index.js
在这里插入图片描述
修改rollup.config.mjs

import terser from '@rollup/plugin-terser';
import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import {babel} from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss'
import css from 'rollup-plugin-css-only'
import autoprefixer from "autoprefixer";
import sass from 'rollup-plugin-sass';
import postcss2 from 'postcss';
import typescript from '@rollup/plugin-typescript';
import stripBanner from 'rollup-plugin-strip-banner';export default {input: ['src/index.js'],output: [{file: "dist/bundle.js",format: 'umd',//assetFileNames: 'assets/[name]-[hash][extname]',name: 'bundle',sourcemap: true,//dir: 'dist/bundle',globals: {jquery: '$'}}],plugins: [typescript({compilerOptions: {lib: ["es5", "es6", "dom"],target: "es5"},exclude: "node_modules/**",}),//terser(),nodeResolve(),stripBanner({include: '**/*.js',exclude: 'node_modules/**/*'}),commonjs(),babel({exclude: 'node_modules/**',babelHelpers: "bundled",}),postcss({extract: true, // 是否将CSS抽离成单独的文件sourceMap: true, // 是否生成 sourceMapplugins: [autoprefixer({// Autoprefixer 配置overrideBrowserslist: ["last 2 Chrome versions","> 1%","Firefox ESR","IE 9-11"],grid: false // 不启用 CSS Grid 的自动前缀})],minimize: false, // 压缩 CSSextensions: ['.css'], // 处理的文件扩展名inject: false, // 防止 Rollup 将 CSS 注入到 JavaScript 中}),// sass({//     // sass 插件的配置//     output: 'dist/bundle2.css', // 输出 CSS 文件的路径//     processor:css => postcss2([autoprefixer({//         // Autoprefixer 配置//         overrideBrowserslist: [//             "last 2 Chrome versions",//             "> 1%",//             "Firefox ESR",//             "IE 9-11"//         ],//         grid: false // 不启用 CSS Grid 的自动前缀//     })])//         .process(css)//         .then(result => result.css)// }),// css({//     output: 'bundle.css'// })],external: ['jquery']
};

参考

https://blog.csdn.net/yutao618/article/details/116272769
https://blog.csdn.net/weixin_39216318/article/details/131431277
https://www.rollupjs.com/configuration-options/#external
https://github.com/rollup/plugins/tree/master

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据挖掘与分析部分实验内容

一、机器学习算法的应用 1. 朴素贝叶斯分类器 相关代码 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB, MultinomialNB from sklearn.metrics import accuracy_score # 将数据加载到DataFrame中&a…

基于声学基元的高质量空间音频生成框架

关键词&#xff1a;人体姿态、声学基元、空间音频建模、体积渲染 过去几年中&#xff0c;渲染和动画制作逼真的3D人体模型技术已经发展成熟&#xff0c;并且达到了令人印象深刻的质量水平。然而&#xff0c;与这些全身模型相关联的空间音频建模&#xff0c;却在很大程度上被忽视…

【C++报错已解决】“Null Pointer Dereference“

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在软件开发过程中&#xff0c;遇到 “Null Pointer Dereference” 报错可能会让你感到困惑。这个错误提示通常意味着你的程…

Git分支合并以及分支部分合并 提交记录合并

Git分支合并,以及分支部分合并,提交记录合并 最近工作中用到git分支合并的场景,记录一下. 分支整体合并,合并所有记录 仅合并分支部分代码

《从C/C++到Java入门指南》- 16.多维数组

多维数组 二维数组 打印一下 Java 中的二维数组会发现&#xff0c;打印的是 JVM 中的地址&#xff1a; import java.util.*; public class Main {public static void main(String[] args) {int arr[][] {{1, 2, 3},{4, 5, 6}};int ns[] {3, 4, 1, 3};System.out.println(A…

鸿蒙仓颉语言【互操作InterOp】

interoperate 语言的互操作&#xff0c;是必不可少的核心能力&#xff0c;在不同的操作系统平台上要与不同基础的OS接口api进行交互&#xff0c;以创建更合适的兼容层。 仓颉使用foreign关键字来声明调用的不同操作系统的基础API&#xff0c;声明的同时&#xff0c;明确数据类…

leetcode hot100 (面试复习用)

数组 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4]输出&#xff1a;6解释&#xff1…

【Qt】按钮的属性相关API

目录 一. QPushButton 二. QRadioButton 按钮组 三. QCheckBox Qt中按钮的继承体系如下图 QAbstractButton是一个抽象类&#xff0c;集成了按钮的核心属性和API 按钮说明QPushButton&#xff08;普通按钮&#xff09;最常见的按钮&#xff0c;用于触发操作或者事件。可以设…

习题2.21

(defn rever [a](defn item[l r](if ( nil (first l)) r(item (rest l) (cons (first l) r))))(item a nil)) 这段代码非常有助于理解什么是深度优先&#xff0c;什么是广度优先。 很久没有写习题的代码了&#xff0c;倒不是懒得做习题了&#xff0c;是私事多&#xff0c;状态…

【系统架构设计】数据库系统(三)

数据库系统&#xff08;三&#xff09; 数据库模式与范式数据库设计备份与恢复分布式数据库系统分布式数据库的概念特点分类目标 分布式数据库的架构分布式数据库系统与并行数据库系统 数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 备份与恢复 分布式数据库系统…

macbook pro大模型推理

安装与配置 参考github ollama 链接安装ollama。安装完成后,安装常用的模型,下载速度超快。 性能测试 在进行实际测试之前,我首先对模型进行了预处理,以确保其在 M3 Max 上能够高效运行。测试过程中,我主要关注了以下几个方面: 模型加载时间 加载大型模型通常需要较…

粘弹性和机械塑性等力学行为如何影响细胞行为?

组织和细胞外基质&#xff08;ECM&#xff09;是细胞生存和功能的关键组成部分&#xff0c;它们不仅提供细胞生长和迁移的结构支撑&#xff0c;还通过其力学特性影响着细胞的形态、功能和行为。组织和ECM并非简单的材料&#xff0c;它们展现出复杂且多样的力学行为&#xff0c;…

农场驿站平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;农场资讯管理&#xff0c;卖家管理&#xff0c;用户分享管理&#xff0c;分享类型管理&#xff0c;商品信息管理&#xff0c;商品分类管理&#xff0c;系统管理&#xff0c;订单管…

MATLAB学习日志DAY13

13.矩阵索引&#xff08;1&#xff09; 13.1 下标 上图&#xff01; A 的行 i 和列 j 中的元素通过 A(i,j) 表示。 例如&#xff0c;A(4,2) 表示第四行和第二列中的数字。 在幻方矩阵中&#xff0c; A(4,2) 为 15。 A(1,4) A(2,4) A(3,4) A(4,4) 用来计算 A 第四列中的…

【PB案例学习笔记】-32制作一个简单记事本程序

大家好&#xff0c;我是晓凡。 写在前面 这是PB案例学习笔记系列文章的第32篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码…

JVM基本知识——运行空间

JVM&#xff08;Java Virtual Machine&#xff09;即Java虚拟机&#xff0c;是负责读取java字节码&#xff0c;并在实际的硬件环境中运行。 JVM可以分为三部分&#xff1a;类装载器&#xff08;ClassLoader&#xff09;子系统、内存空间、执行引擎 内存空间&#xff08;运行时…

“狂飙”过后,大模型未来在何方?

2024年6月14日&#xff0c;第六届“北京智源大会”在中关村展示中心开幕。 开幕现场&#xff0c;智源研究院、OpenAI、百度、零一万物、百川智能、智谱AI、面壁智能等国内主流大模型公司CEO与CTO&#xff0c;人工智能顶尖学者和产业专家&#xff0c;在围绕人工智能关键技术路径…

【计算机网络】计算机网络的性能指标(上篇)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️计算机网络】 文章目录 前言计算机网络的性能指标速率数据量速率的定义计算方法与测量影响因素优化方法 带宽带宽的定义影响因素计算方法优化方法 吞吐量定义测量与测试影响因素与带宽的区别提升方法…

数据结构(栈)

文章目录 一、概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压…

docker compose 容器 编排分组

遇到问题&#xff1a;执行docker compose up -d 后docker compose 创建的容器们 在desktop-docker 中都在docker下一堆 搜索想着能不能把这个docker名字改一下&#xff0c;但是都没有找到这样的一个方案&#xff1b; 最后发现&#xff0c;我执行docker compose up -d 命令所在…