TS Package with RollUp
Contents
TS Package with RollUp#
Init Project#
```bash
mkdir ts-rollup
cd ts-rollup
mkdir demo src
touch src/index.ts
touch rollup.config.js
npm init -y
npm install typescript tslib @rollup/plugin-typescript -D
npm install --save-dev rollup-plugin-terser
npx tsc --init
```
Config#
rollup.config.js
import typescript from "@rollup/plugin-typescript";
import { terser } from "rollup-plugin-terser";
export default {
input: "src/index.ts",
output: {
file: "dist/bundle.min.js",
format: "esm",
},
plugins: [typescript(), terser()],
};
package.json Use
filesto control what folders you want to upload to NPM.
{
"name": "ts-rollup",
"version": "1.0.0",
"description": "",
"main": "dist/bundle.min.js",
"scripts": {
"build": "tsc && rollup -c rollup.config.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"typings": "dist/types/index.d.ts",
"files": ["dist", "src"],
"repository": {
"type": "git",
"url": ""
},
"license": "ISC",
"devDependencies": {
"@rollup/plugin-typescript": "^8.3.2",
"rollup-plugin-terser": "^7.0.2",
"tslib": "^2.4.0",
"typescript": "^4.6.4"
}
}
tsconfig.js
{
"compilerOptions": {
"target": "es5",
"module": "ESNext",
"declaration": true,
"sourceMap": true,
"declarationDir": "./dist/types"
}
}
To allow script import after build Add multiple output in
rollup.config.js
import typescript from "@rollup/plugin-typescript";
import { terser } from "rollup-plugin-terser";
export default {
input: "src/index.ts",
output: [
{
file: "dist/bundle.esm.js",
format: "esm",
},
{
file: "dist/bundle.umd.js",
format: "umd",
name: "Skycoco",
},
],
plugins: [typescript(), terser()],
};
Then we need to modify package.json
{
"main": "dist/bundle.umd.js",
"moudle": "dist/bundle.esm.js"
}
main is for import
moudle is for require
In html script
<script src="../dist/bundle.umd.js"></script>
<body>
<script>
// Skycoco.add(10,10)
const util = window.Skycoco;
console.log(util.add(10, 20));
</script>
</body>
Rollup package .glsl/.vs/.fs/.vert/.fragment file#
npm i rollup-plugin-glslify --save-dev
In rollup.config.js, more see (https://blog.meglody.com/diary/%E4%BD%BF%E7%94%A8TypeScript%E5%BC%80%E5%8F%91WebGL%EF%BC%88%E4%B8%80%EF%BC%89%E4%BD%BF%E7%94%A8%E7%9D%80%E8%89%B2%E5%99%A8/)
import glslify from "rollup-plugin-glslify";
export default {
plugins: [typescript(), terser(), glslify()],
};
In root folder, create a index.d.ts file.
declare module "*.vert";
declare module "*.frag";
declare module "*.vs";
declare module "*.fs";
declare module "*.glsl";
Rollup url loader#
npm i @rollup/plugin-url -D
In rollup.config.js, more see (https://www.npmjs.com/package/@rollup/plugin-url)
import url from "@rollup/plugin-url";
export default {
input: "src/index.js",
output: {
dir: "output",
format: "cjs",
},
plugins: [url()],
};
In ts we can do
// src/index.js
import svg from "./image.svg";
console.log(`svg contents: ${svg}`);
Also in index.d.ts, we need to declare file. such as
declare module "*.svg";
declare module "*.hdr";
test js online#
Upload steps#
Upload steps
npm adduser / npm login npm publish .Version use
Semantic version1.2.3 1: major, when you make a big change 2: minor, when you add new functions 3: patch, when you fix something
npm version major
npm version minor
npm version patch
Update for package .glsl/.vs/.fs/.vert/.fragment file#
Install these dependencies
npm i rollup-plugin-commonjs -D
npm i rollup-plugin-glslify -D
npm i rollup-plugin-node-resolve -D
npm i rollup-plugin-typescript2 -D
npm i glsl-blend-soft-light
npm i glsl-film-grain
config rollup.config.js
import path from "path";
import resolve from "rollup-plugin-node-resolve"; // 依赖引用插件
import commonjs from "rollup-plugin-commonjs"; // commonjs模块转换插件
import glslify from "rollup-plugin-glslify";
import ts from "rollup-plugin-typescript2";
const getPath = (_path) => path.resolve(__dirname, _path);
import packageJSON from "./package.json";
const extensions = [".js", ".ts", ".tsx"];
// 导入本地ts配置
const tsPlugin = ts({
tsconfig: getPath("./tsconfig.json"),
tsconfigOverride: { extensions },
});
// 基础配置
const commonConf = {
// 入口文件
input: getPath("./src/index.ts"),
plugins: [
resolve({
extensions,
}),
glslify(),
commonjs(),
tsPlugin,
],
};
// 需要导出的模块类型
const outputMap = [
{
file: "dist/bundle.esm.js",
format: "esm",
},
{
file: "dist/bundle.umd.js",
format: "umd",
name: "Copper",
},
];
const buildConf = (options) => Object.assign({}, commonConf, options);
export default outputMap.map((output) => {
const conf = buildConf({
output: {
...output,
name: packageJSON.name,
},
});
return conf;
});
In package.json
{
"name": "gltfloader-plugin-test",
"version": "1.2.0",
"description": "for test",
"main": "dist/bundle.umd.js",
"moudle": "dist/bundle.esm.js",
"types": "dist/types/index.d.ts",
"scripts": {
"build": "tsc && rollup -c rollup.config.js",
"build:test": "rollup -c rollup.config.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"files": ["dist"]
}
recommand use npm run build to package.
load css
npm i rollup-plugin-postcss postcss --D
In rollup.config.js
import postcss from 'rollup-plugin-postcss'
export default {
input: ...,
output: ...,
plugins:[
postcss()
]
}