Skip to content

Commit

Permalink
feat!: move to ESM-only and fix package exports (#3380)
Browse files Browse the repository at this point in the history
Co-authored-by: userquin <userquin@gmail.com>
Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
Co-authored-by: Chris <1633711653@qq.com>
Co-authored-by: Anthony Fu <github@antfu.me>
  • Loading branch information
5 people committed Apr 1, 2024
1 parent a1069ce commit 41bc87b
Show file tree
Hide file tree
Showing 93 changed files with 1,283 additions and 5,165 deletions.
189 changes: 182 additions & 7 deletions docs/integrations/webpack.md
@@ -1,6 +1,7 @@
---
title: UnoCSS Webpack Plugin
description: The webpack plugin for UnoCSS (@unocss/webpack).
outline: deep
---

# Webpack Plugin
Expand All @@ -25,18 +26,54 @@ This plugin does not come with any default presets.
```
:::

From UnoCSS version `v0.59.0`, UnoCSS has been moved to ESM-only, you need to load your configuration via dynamic import:

::: code-group
```ts [webpack 5]
// webpack.config.js
module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
}))
}
```

```js [webpack 4]
// webpack.config.js
module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
plugins: [
UnoCSS()
],
css: {
extract: {
filename: '[name].[hash:9].css'
},
},
}))
}
```
:::

If you're using older version of UnoCSS, you can use the following code:

::: code-group
```ts [webpack 5]
// webpack.config.js
const UnoCSS = require('@unocss/webpack').default

module.exports = {
plugins: [
UnoCSS(),
UnoCSS()
],
optimization: {
realContentHash: true,
},
realContentHash: true
}
}
```

Expand All @@ -46,13 +83,13 @@ const UnoCSS = require('@unocss/webpack').default

module.exports = {
plugins: [
UnoCSS(),
UnoCSS()
],
css: {
extract: {
filename: '[name].[hash:9].css',
},
},
filename: '[name].[hash:9].css'
}
}
}
```
:::
Expand Down Expand Up @@ -80,3 +117,141 @@ Add `uno.css` to your main entry:
// main.ts
import 'uno.css'
```

## Frameworks

### Vue + Vue CLI

If you're using [Vue CLI](https://cli.vuejs.org/) with webpack 4/5 with UnoCSS `v0.59.0`, you need to use the latest [Vue CLI Service](https://cli.vuejs.org/guide/cli-service.html) `v5.0.8` to load your configuration with dynamic import:

::: code-group
```ts [webpack 5]
// vue.config.js
const process = require('node:process')

module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
configureWebpack: {
devtool: 'inline-source-map',
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: 'css/[name].css',
chunkFilename: 'css/[name].css'
}
: true
}
}))
}
```

```ts [webpack 4]
// vue.config.js
const process = require('node:process')

module.exports = function () {
return import('@unocss/webpack').then(({ default: UnoCSS }) => ({
configureWebpack: {
plugins: [
UnoCSS({})
]
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: '[name].css',
chunkFilename: '[name].[hash:9].css'
}
: true
}
}))
}
```
:::

If using an older version of UnoCSS, you can use the following code:

::: code-group
```ts [webpack 5]
// vue.config.js
const process = require('node:process')
const UnoCSS = require('@unocss/webpack').default

module.exports = {
configureWebpack: {
devtool: 'inline-source-map',
plugins: [
UnoCSS()
],
optimization: {
realContentHash: true
}
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: 'css/[name].css',
chunkFilename: 'css/[name].css'
}
: true
},
}
```

```ts [webpack 4]
// vue.config.js
const process = require('node:process')
const UnoCSS = require('@unocss/webpack').default

module.exports = {
configureWebpack: {
plugins: [
UnoCSS({}),
]
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false,
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: '[name].css',
chunkFilename: '[name].[hash:9].css',
}
: true,
},
}
```
:::
4 changes: 2 additions & 2 deletions examples/vue-cli4/package.json
Expand Up @@ -11,8 +11,8 @@
},
"devDependencies": {
"@unocss/webpack": "link:../../packages/webpack",
"@vue/cli-plugin-babel": "~4.5.15",
"@vue/cli-service": "~4.5.15",
"@vue/cli-plugin-babel": "~5.0.8",
"@vue/cli-service": "~5.0.8",
"cross-env": "^7.0.3",
"unocss": "link:../../packages/unocss",
"vue-template-compiler": "^2.7.16"
Expand Down
50 changes: 27 additions & 23 deletions examples/vue-cli4/vue.config.js
@@ -1,26 +1,30 @@
const process = require('node:process')
const UnoCSS = require('@unocss/webpack').default

module.exports = {
configureWebpack: {
plugins: [
UnoCSS({}),
],
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false,
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: '[name].css',
}
: {
filename: '[name].[hash:9].css',
},
},
module.exports = function () {
return import('@unocss/webpack').then((m) => {
const UnoCSS = m.default
return {
configureWebpack: {
plugins: [
UnoCSS({}),
],
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false,
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: '[name].css',
}
: {
filename: '[name].[hash:9].css',
},
},
}
})
}
56 changes: 30 additions & 26 deletions examples/vue-cli5/vue.config.js
@@ -1,29 +1,33 @@
const process = require('node:process')
const UnoCSS = require('@unocss/webpack').default

module.exports = {
configureWebpack: {
devtool: 'inline-source-map',
plugins: [
UnoCSS(),
],
optimization: {
realContentHash: true,
},
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false,
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: 'css/[name].css',
chunkFilename: 'css/[name].css',
}
: true,
},
module.exports = function () {
return import('@unocss/webpack').then((m) => {
const UnoCSS = m.default
return {
configureWebpack: {
devtool: 'inline-source-map',
plugins: [
UnoCSS(),
],
optimization: {
realContentHash: true,
},
},
chainWebpack(config) {
config.module.rule('vue').uses.delete('cache-loader')
config.module.rule('tsx').uses.delete('cache-loader')
config.merge({
cache: false,
})
},
css: {
extract: process.env.NODE_ENV === 'development'
? {
filename: 'css/[name].css',
chunkFilename: 'css/[name].css',
}
: true,
},
}
})
}
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -8,7 +8,7 @@
"postinstall": "esno scripts/prepare.ts",
"taze": "taze minor -wIr && pnpm -r --parallel run update-post",
"bench": "npm -C bench run bench",
"build": "rimraf packages/*/dist --glob && esno scripts/copy-files.ts && pnpm -r --filter=./packages/* run build && pnpm -r run build-post",
"build": "rimraf packages/*/dist --glob && esno scripts/copy-files.ts && pnpm -r --filter=./packages/* run build && pnpm -r run build-post && esno scripts/postbuild.ts",
"dev": "nr stub",
"deploy": "nr build && npm -C docs run docs:build && npm -C playground run build && npm -C interactive run build",
"interactive": "npm -C interactive run dev",
Expand Down
3 changes: 0 additions & 3 deletions packages/astro/build.config.ts
Expand Up @@ -9,7 +9,4 @@ export default defineBuildConfig({
externals: [
'astro',
],
rollup: {
emitCJS: true,
},
})
8 changes: 4 additions & 4 deletions packages/astro/package.json
@@ -1,5 +1,6 @@
{
"name": "@unocss/astro",
"type": "module",
"version": "0.58.9",
"description": "UnoCSS integration for Astro",
"author": "Anthony Fu <anthonyfu117@hotmail.com>",
Expand All @@ -25,12 +26,11 @@
"sideEffects": false,
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
}
},
"main": "./dist/index.cjs",
"main": "./dist/index.mjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"files": [
Expand Down
3 changes: 0 additions & 3 deletions packages/autocomplete/build.config.ts
Expand Up @@ -10,7 +10,4 @@ export default defineBuildConfig({
'pug',
'@unocss/core',
],
rollup: {
emitCJS: true,
},
})

0 comments on commit 41bc87b

Please sign in to comment.