mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-25 15:15:19 +00:00
chore: update build scripts (#69)
This commit is contained in:
parent
030327b75f
commit
c351574043
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@ -37,6 +37,10 @@ jobs:
|
|||||||
if: steps.cache.outputs.cache-hit != 'true'
|
if: steps.cache.outputs.cache-hit != 'true'
|
||||||
run: yarn # --immutable
|
run: yarn # --immutable
|
||||||
|
|
||||||
|
|
||||||
|
- name: Stub
|
||||||
|
run: yarn stub
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: yarn lint
|
run: yarn lint
|
||||||
|
|
||||||
|
28
package.json
28
package.json
@ -5,42 +5,28 @@
|
|||||||
"packages/*"
|
"packages/*"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"link": "lerna link",
|
"build": "FORCE_COLOR=1 lerna run prepack --stream --no-prefix",
|
||||||
"build": "jiti ./scripts/build-all",
|
"stub": "lerna run prepack -- --stub",
|
||||||
"stub": "yarn build --stub",
|
"release": "yarn && yarn build && FORCE_COLOR=1 lerna publish -m \"chore: release\" && yarn stub",
|
||||||
"gentypes": "yarn workspace @nuxt/kit jiti ./scripts/gentypes",
|
|
||||||
"release": "yarn build && lerna publish -m \"chore: release\" && yarn stub",
|
|
||||||
"nu": "./node_modules/.bin/nu",
|
"nu": "./node_modules/.bin/nu",
|
||||||
"play": "yarn run nu dev playground",
|
"play": "yarn run nu dev playground",
|
||||||
"lint": "yarn gentypes && eslint --ext .vue,.ts,.js .",
|
"lint": "eslint --ext .vue,.ts,.js .",
|
||||||
"test": "yarn lint",
|
|
||||||
"postinstall": "yarn stub",
|
"postinstall": "yarn stub",
|
||||||
"version": "yarn && git add yarn.lock"
|
"version": "yarn && git add yarn.lock"
|
||||||
},
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"esbuild": "0.10.2"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nuxtjs/eslint-config": "^6.0.0",
|
"@nuxtjs/eslint-config": "^6.0.0",
|
||||||
"@nuxtjs/eslint-config-typescript": "^6.0.0",
|
"@nuxtjs/eslint-config-typescript": "^6.0.0",
|
||||||
"@rollup/plugin-alias": "^3.1.2",
|
|
||||||
"@rollup/plugin-commonjs": "^18.0.0",
|
|
||||||
"@rollup/plugin-node-resolve": "^11.2.1",
|
|
||||||
"@types/jest": "^26.0.22",
|
"@types/jest": "^26.0.22",
|
||||||
"@types/node": "^14.14.37",
|
"@types/node": "^14.14.37",
|
||||||
"@types/rimraf": "^3.0.0",
|
|
||||||
"chalk": "^4.1.0",
|
|
||||||
"defu": "^3.2.2",
|
|
||||||
"esbuild": "^0.10.0",
|
|
||||||
"eslint": "^7.23.0",
|
"eslint": "^7.23.0",
|
||||||
"execa": "^5.0.0",
|
|
||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"jiti": "^1.6.4",
|
"jiti": "^1.6.4",
|
||||||
"lerna": "^4.0.0",
|
"lerna": "^4.0.0",
|
||||||
"mkdist": "^0.1.3",
|
"mkdist": "^0.1.3",
|
||||||
"pretty-bytes": "^5.6.0",
|
|
||||||
"rimraf": "^3.0.2",
|
|
||||||
"rollup": "^2.44.0",
|
|
||||||
"rollup-plugin-dts": "^3.0.1",
|
|
||||||
"rollup-plugin-esbuild": "^3.0.2",
|
|
||||||
"standard-version": "^9.1.1",
|
|
||||||
"ts-jest": "^26.5.4",
|
"ts-jest": "^26.5.4",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.2.3"
|
||||||
}
|
}
|
||||||
|
14
packages/app/build.config.ts
Normal file
14
packages/app/build.config.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: false,
|
||||||
|
entries: [
|
||||||
|
{ input: 'src/', name: 'app' }
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
'@vueuse/head',
|
||||||
|
'ohmyfetch',
|
||||||
|
'vue-router',
|
||||||
|
'vuex5'
|
||||||
|
]
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
const { resolve } = require('path')
|
const { resolve } = require('path')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
appDir: resolve(__dirname, 'dist')
|
appDir: resolve(__dirname, 'dist/app')
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,19 @@
|
|||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"repository": "nuxt/framework",
|
"repository": "nuxt/framework",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/app/index.js",
|
||||||
"module": "./dist/index.js",
|
"module": "./dist/app/index.js",
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
"meta.js"
|
"meta.js"
|
||||||
],
|
],
|
||||||
|
"scripts": {
|
||||||
|
"prepack": "unbuild"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"unbuild": "^0.1.11"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vueuse/head": "^0.5.1",
|
"@vueuse/head": "^0.5.1",
|
||||||
"hookable": "^4.4.1",
|
"hookable": "^4.4.1",
|
||||||
@ -16,19 +23,5 @@
|
|||||||
"vue": "^3.0.11",
|
"vue": "^3.0.11",
|
||||||
"vue-router": "^4.0.6",
|
"vue-router": "^4.0.6",
|
||||||
"vuex5": "^0.5.0-testing.3"
|
"vuex5": "^0.5.0-testing.3"
|
||||||
},
|
|
||||||
"build": {
|
|
||||||
"entries": {
|
|
||||||
"index": {
|
|
||||||
"distDir": ".gen"
|
|
||||||
},
|
|
||||||
"/": {}
|
|
||||||
},
|
|
||||||
"dependencies": [
|
|
||||||
"@vueuse/head",
|
|
||||||
"ohmyfetch",
|
|
||||||
"vue-router",
|
|
||||||
"vuex5"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
export { useNuxt } from './nuxt/composables'
|
|
||||||
|
|
||||||
export * from './nuxt'
|
export * from './nuxt'
|
||||||
export * from './shim'
|
export * from './shim'
|
||||||
|
export * from './composables'
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
|
import { App, getCurrentInstance } from 'vue'
|
||||||
import Hookable from 'hookable'
|
import Hookable from 'hookable'
|
||||||
import type { App } from 'vue'
|
import { defineGetter } from './utils'
|
||||||
import { defineGetter } from '../utils'
|
|
||||||
import { callWithNuxt } from './composables'
|
|
||||||
|
|
||||||
export interface Nuxt {
|
export interface Nuxt {
|
||||||
app: App
|
app: App
|
||||||
@ -93,3 +92,37 @@ export async function applyPlugins (nuxt: Nuxt, plugins: Plugin[]) {
|
|||||||
await applyPlugin(nuxt, plugin)
|
await applyPlugin(nuxt, plugin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let currentNuxtInstance: Nuxt | null
|
||||||
|
|
||||||
|
export const setNuxtInstance = (nuxt: Nuxt | null) => {
|
||||||
|
currentNuxtInstance = nuxt
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that the setup function passed in has access to the Nuxt instance via `useNuxt`.
|
||||||
|
* @param nuxt A Nuxt instance
|
||||||
|
* @param setup The function to call
|
||||||
|
*/
|
||||||
|
export async function callWithNuxt (nuxt: Nuxt, setup: () => any) {
|
||||||
|
setNuxtInstance(nuxt)
|
||||||
|
const p = setup()
|
||||||
|
setNuxtInstance(null)
|
||||||
|
await p
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current Nuxt instance.
|
||||||
|
*/
|
||||||
|
export function useNuxt (): Nuxt {
|
||||||
|
const vm = getCurrentInstance()
|
||||||
|
|
||||||
|
if (!vm) {
|
||||||
|
if (!currentNuxtInstance) {
|
||||||
|
throw new Error('nuxt instance unavailable')
|
||||||
|
}
|
||||||
|
return currentNuxtInstance
|
||||||
|
}
|
||||||
|
|
||||||
|
return vm.appContext.app.$nuxt
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
import { getCurrentInstance } from 'vue'
|
|
||||||
import type { Nuxt } from '../nuxt'
|
|
||||||
|
|
||||||
let currentNuxtInstance: Nuxt | null
|
|
||||||
|
|
||||||
export const setNuxtInstance = (nuxt: Nuxt | null) => {
|
|
||||||
currentNuxtInstance = nuxt
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensures that the setup function passed in has access to the Nuxt instance via `useNuxt`.
|
|
||||||
* @param nuxt A Nuxt instance
|
|
||||||
* @param setup The function to call
|
|
||||||
*/
|
|
||||||
export async function callWithNuxt (nuxt: Nuxt, setup: () => any) {
|
|
||||||
setNuxtInstance(nuxt)
|
|
||||||
const p = setup()
|
|
||||||
setNuxtInstance(null)
|
|
||||||
await p
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the current Nuxt instance.
|
|
||||||
*/
|
|
||||||
export function useNuxt (): Nuxt {
|
|
||||||
const vm = getCurrentInstance()
|
|
||||||
|
|
||||||
if (!vm) {
|
|
||||||
if (!currentNuxtInstance) {
|
|
||||||
throw new Error('nuxt instance unavailable')
|
|
||||||
}
|
|
||||||
return currentNuxtInstance
|
|
||||||
}
|
|
||||||
|
|
||||||
return vm.appContext.app.$nuxt
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
import type { Plugin } from '@nuxt/app'
|
|
||||||
import { createHead, renderHeadToString } from '@vueuse/head'
|
import { createHead, renderHeadToString } from '@vueuse/head'
|
||||||
|
import type { Plugin } from '@nuxt/app'
|
||||||
import { Head, Html, Body, Title, Meta, Link, Script, Style } from './head'
|
import { Head, Html, Body, Title, Meta, Link, Script, Style } from './head'
|
||||||
|
|
||||||
export default <Plugin> function head (nuxt) {
|
export default <Plugin> function head (nuxt) {
|
||||||
|
@ -6,7 +6,9 @@ import {
|
|||||||
RouterLink
|
RouterLink
|
||||||
} from 'vue-router'
|
} from 'vue-router'
|
||||||
import type { Plugin } from '@nuxt/app'
|
import type { Plugin } from '@nuxt/app'
|
||||||
|
// @ts-ignore
|
||||||
import routes from 'nuxt/build/routes'
|
import routes from 'nuxt/build/routes'
|
||||||
|
// @ts-ignore
|
||||||
import NuxtPage from './NuxtPage.vue'
|
import NuxtPage from './NuxtPage.vue'
|
||||||
|
|
||||||
export default <Plugin> function router (nuxt) {
|
export default <Plugin> function router (nuxt) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { createVuex, defineStore, useStore } from 'vuex5/dist/vuex.esm'
|
import { createVuex, defineStore, useStore } from 'vuex5/dist/vuex.esm'
|
||||||
import type { Plugin } from '@nuxt/app'
|
import type { Plugin } from '@nuxt/app'
|
||||||
import { useHydration } from 'nuxt/app/composables'
|
import { useHydration } from '../composables'
|
||||||
|
|
||||||
export default <Plugin> function ({ app }) {
|
export default <Plugin> function ({ app }) {
|
||||||
const vuex = createVuex({ })
|
const vuex = createVuex({ })
|
||||||
|
11
packages/cli/build.config.ts
Normal file
11
packages/cli/build.config.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import type { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: false,
|
||||||
|
entries: [
|
||||||
|
'src/index'
|
||||||
|
],
|
||||||
|
externals: [
|
||||||
|
'nuxt3'
|
||||||
|
]
|
||||||
|
}
|
@ -9,18 +9,14 @@
|
|||||||
"nuxt": "./bin/nuxt.js",
|
"nuxt": "./bin/nuxt.js",
|
||||||
"nuxt-cli": "./bin/nuxt.js"
|
"nuxt-cli": "./bin/nuxt.js"
|
||||||
},
|
},
|
||||||
|
"scripts": {
|
||||||
|
"prepack": "unbuild"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"unbuild": "^0.1.11"
|
||||||
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"bin",
|
"bin",
|
||||||
"dist"
|
"dist"
|
||||||
],
|
]
|
||||||
"build": {
|
|
||||||
"externals": [
|
|
||||||
"nuxt3"
|
|
||||||
],
|
|
||||||
"entries": {
|
|
||||||
"index": {
|
|
||||||
"format": "cjs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,8 @@ async function _main () {
|
|||||||
const isDev = cmd === 'dev'
|
const isDev = cmd === 'dev'
|
||||||
const rootDir = resolve(process.cwd(), args[1] || '.')
|
const rootDir = resolve(process.cwd(), args[1] || '.')
|
||||||
|
|
||||||
const { loadNuxt, build } = await import('nuxt3')
|
const pkg = 'nuxt3'
|
||||||
|
const { loadNuxt, build } = require(pkg)
|
||||||
|
|
||||||
const nuxt = await loadNuxt({
|
const nuxt = await loadNuxt({
|
||||||
for: isDev ? 'dev' : 'build',
|
for: isDev ? 'dev' : 'build',
|
||||||
|
16
packages/kit/build.config.ts
Normal file
16
packages/kit/build.config.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import type { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: true,
|
||||||
|
entries: [
|
||||||
|
{
|
||||||
|
input: 'src/config/schema/index',
|
||||||
|
name: 'config',
|
||||||
|
builder: 'untyped',
|
||||||
|
defaults: {
|
||||||
|
rootDir: '<rootDir>'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'src/index'
|
||||||
|
]
|
||||||
|
}
|
@ -8,6 +8,12 @@
|
|||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
|
"scripts": {
|
||||||
|
"prepack": "unbuild"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"unbuild": "^0.1.11"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"create-require": "^1.1.1",
|
"create-require": "^1.1.1",
|
||||||
@ -22,13 +28,5 @@
|
|||||||
"unctx": "^0.0.3",
|
"unctx": "^0.0.3",
|
||||||
"untyped": "^0.2.4",
|
"untyped": "^0.2.4",
|
||||||
"upath": "^2.0.1"
|
"upath": "^2.0.1"
|
||||||
},
|
|
||||||
"build": {
|
|
||||||
"prebuild": "jiti ./scripts/gentypes",
|
|
||||||
"entries": {
|
|
||||||
"index": {
|
|
||||||
"format": "cjs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
import { resolve } from 'path'
|
|
||||||
import { mkdir, writeFile } from 'fs/promises'
|
|
||||||
import { resolveSchema, generateTypes, generateMarkdown } from 'untyped'
|
|
||||||
|
|
||||||
async function main () {
|
|
||||||
const genDir = resolve(__dirname, '../.gen')
|
|
||||||
const srcConfig = await import('../src/config/schema').then(r => r.default)
|
|
||||||
|
|
||||||
const defaults = { rootDir: '/<dir>/' }
|
|
||||||
const schema = resolveSchema(srcConfig, defaults)
|
|
||||||
|
|
||||||
await mkdir(genDir).catch(() => { })
|
|
||||||
await writeFile(resolve(genDir, 'config.md'), generateMarkdown(schema))
|
|
||||||
await writeFile(resolve(genDir, 'config.schema.json'), JSON.stringify(schema, null, 2))
|
|
||||||
await writeFile(resolve(genDir, 'config.defaults.json'), JSON.stringify(defaults, null, 2))
|
|
||||||
await writeFile(resolve(genDir, 'config.d.ts'), 'export ' + generateTypes(schema, 'ConfigSchema'))
|
|
||||||
}
|
|
||||||
|
|
||||||
main().catch(console.error)
|
|
@ -1,4 +1,4 @@
|
|||||||
import { ConfigSchema } from '../../.gen/config'
|
import { ConfigSchema } from '../../.gen/config/config'
|
||||||
import { ModuleInstallOptions } from './module'
|
import { ModuleInstallOptions } from './module'
|
||||||
import { NuxtHooks } from './hooks'
|
import { NuxtHooks } from './hooks'
|
||||||
|
|
||||||
|
23
packages/nitro/build.config.ts
Normal file
23
packages/nitro/build.config.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import type { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: true,
|
||||||
|
entries: [
|
||||||
|
'src/index',
|
||||||
|
'src/compat',
|
||||||
|
{ input: 'src/runtime/', format: 'esm', declaration: false }
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
'@cloudflare/kv-asset-handler',
|
||||||
|
'@netlify/functions',
|
||||||
|
'@nuxt/devalue',
|
||||||
|
'connect',
|
||||||
|
'destr',
|
||||||
|
'ohmyfetch',
|
||||||
|
'ora',
|
||||||
|
'vue-bundle-renderer',
|
||||||
|
'vue-server-renderer',
|
||||||
|
'@vue/server-renderer',
|
||||||
|
'vue'
|
||||||
|
]
|
||||||
|
}
|
@ -7,28 +7,8 @@
|
|||||||
"dist",
|
"dist",
|
||||||
"compat.js"
|
"compat.js"
|
||||||
],
|
],
|
||||||
"build": {
|
"scripts": {
|
||||||
"entries": {
|
"prepack": "unbuild"
|
||||||
"index": {
|
|
||||||
"format": "cjs"
|
|
||||||
},
|
|
||||||
"compat": {
|
|
||||||
"format": "cjs"
|
|
||||||
},
|
|
||||||
"runtime/": {}
|
|
||||||
},
|
|
||||||
"dependencies": [
|
|
||||||
"@cloudflare/kv-asset-handler",
|
|
||||||
"@nuxt/devalue",
|
|
||||||
"connect",
|
|
||||||
"destr",
|
|
||||||
"ohmyfetch",
|
|
||||||
"ora",
|
|
||||||
"vue-bundle-renderer",
|
|
||||||
"vue-server-renderer",
|
|
||||||
"@vue/server-renderer",
|
|
||||||
"vue"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@cloudflare/kv-asset-handler": "^0.1.1",
|
"@cloudflare/kv-asset-handler": "^0.1.1",
|
||||||
@ -92,6 +72,7 @@
|
|||||||
"@types/globby": "^9.1.0",
|
"@types/globby": "^9.1.0",
|
||||||
"@types/http-proxy": "^1.17.5",
|
"@types/http-proxy": "^1.17.5",
|
||||||
"@types/node-fetch": "^2.5.9",
|
"@types/node-fetch": "^2.5.9",
|
||||||
"@types/serve-static": "^1.13.9"
|
"@types/serve-static": "^1.13.9",
|
||||||
|
"unbuild": "^0.1.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
14
packages/nuxt3/build.config.ts
Normal file
14
packages/nuxt3/build.config.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import type { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: false,
|
||||||
|
entries: [
|
||||||
|
'src/index'
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
'@nuxt/app',
|
||||||
|
'@nuxt/vite-builder',
|
||||||
|
'@nuxt/webpack-builder',
|
||||||
|
'nuxt-cli'
|
||||||
|
]
|
||||||
|
}
|
@ -7,18 +7,8 @@
|
|||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"build": {
|
"scripts": {
|
||||||
"entries": {
|
"prepack": "unbuild"
|
||||||
"index": {
|
|
||||||
"format": "cjs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": [
|
|
||||||
"@nuxt/app",
|
|
||||||
"@nuxt/vite-builder",
|
|
||||||
"@nuxt/webpack-builder",
|
|
||||||
"nuxt-cli"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/app": "^0.2.1",
|
"@nuxt/app": "^0.2.1",
|
||||||
@ -43,6 +33,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/fs-extra": "^9.0.10",
|
"@types/fs-extra": "^9.0.10",
|
||||||
"@types/hash-sum": "^1.0.0",
|
"@types/hash-sum": "^1.0.0",
|
||||||
"@types/lodash": "^4.14.168"
|
"@types/lodash": "^4.14.168",
|
||||||
|
"unbuild": "^0.1.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import Hookable from 'hookable'
|
import Hookable from 'hookable'
|
||||||
import { loadNuxtConfig, LoadNuxtConfigOptions, Nuxt, NuxtOptions, installModule } from '@nuxt/kit'
|
import { loadNuxtConfig, LoadNuxtConfigOptions, Nuxt, NuxtOptions, installModule, NuxtConfig } from '@nuxt/kit'
|
||||||
import { initNitro } from './nitro'
|
import { initNitro } from './nitro'
|
||||||
|
|
||||||
export function createNuxt (options: NuxtOptions): Nuxt {
|
export function createNuxt (options: NuxtOptions): Nuxt {
|
||||||
@ -39,6 +39,8 @@ async function initNuxt (nuxt: Nuxt) {
|
|||||||
|
|
||||||
export interface LoadNuxtOptions extends LoadNuxtConfigOptions {
|
export interface LoadNuxtOptions extends LoadNuxtConfigOptions {
|
||||||
for?: 'dev' | 'build'
|
for?: 'dev' | 'build'
|
||||||
|
rootDir?: string
|
||||||
|
config?: NuxtConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loadNuxt (loadOpts: LoadNuxtOptions = {}): Promise<Nuxt> {
|
export async function loadNuxt (loadOpts: LoadNuxtOptions = {}): Promise<Nuxt> {
|
||||||
|
13
packages/vite/build.config.ts
Normal file
13
packages/vite/build.config.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import type { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: false,
|
||||||
|
entries: [
|
||||||
|
'src/index'
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
'@nuxt/kit',
|
||||||
|
'@vue/compiler-sfc',
|
||||||
|
'vue'
|
||||||
|
]
|
||||||
|
}
|
@ -7,17 +7,11 @@
|
|||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"build": {
|
"scripts": {
|
||||||
"entries": {
|
"prepack": "unbuild"
|
||||||
"index": {
|
|
||||||
"format": "cjs"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"dependencies": [
|
"devDependencies": {
|
||||||
"@nuxt/kit",
|
"unbuild": "^0.1.11"
|
||||||
"@vue/compiler-sfc",
|
|
||||||
"vue"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/kit": "^0.2.0",
|
"@nuxt/kit": "^0.2.0",
|
||||||
|
25
packages/webpack/build.config.ts
Normal file
25
packages/webpack/build.config.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import type { BuildConfig } from 'unbuild'
|
||||||
|
|
||||||
|
export default <BuildConfig>{
|
||||||
|
declaration: false,
|
||||||
|
entries: [
|
||||||
|
'src/index'
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
'@nuxt/kit',
|
||||||
|
'@vue/compiler-sfc',
|
||||||
|
'@vue/babel-preset-jsx',
|
||||||
|
'postcss',
|
||||||
|
'postcss-import-resolver',
|
||||||
|
'postcss-loader',
|
||||||
|
'babel-loader',
|
||||||
|
'vue-loader',
|
||||||
|
'css-loader',
|
||||||
|
'file-loader',
|
||||||
|
'style-resources-loader',
|
||||||
|
'url-loader',
|
||||||
|
'vue-style-loader',
|
||||||
|
'@babel/core',
|
||||||
|
'vue'
|
||||||
|
]
|
||||||
|
}
|
@ -7,29 +7,8 @@
|
|||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"build": {
|
"scripts": {
|
||||||
"entries": {
|
"prepack": "unbuild"
|
||||||
"index": {
|
|
||||||
"format": "cjs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": [
|
|
||||||
"@nuxt/kit",
|
|
||||||
"@vue/compiler-sfc",
|
|
||||||
"@vue/babel-preset-jsx",
|
|
||||||
"postcss",
|
|
||||||
"postcss-import-resolver",
|
|
||||||
"postcss-loader",
|
|
||||||
"babel-loader",
|
|
||||||
"vue-loader",
|
|
||||||
"css-loader",
|
|
||||||
"file-loader",
|
|
||||||
"style-resources-loader",
|
|
||||||
"url-loader",
|
|
||||||
"vue-style-loader",
|
|
||||||
"@babel/core",
|
|
||||||
"vue"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.13.14",
|
"@babel/core": "^7.13.14",
|
||||||
@ -70,6 +49,7 @@
|
|||||||
"@types/terser-webpack-plugin": "^5.0.3",
|
"@types/terser-webpack-plugin": "^5.0.3",
|
||||||
"@types/webpack-bundle-analyzer": "^3.9.2",
|
"@types/webpack-bundle-analyzer": "^3.9.2",
|
||||||
"@types/webpack-dev-middleware": "^4.1.2",
|
"@types/webpack-dev-middleware": "^4.1.2",
|
||||||
"@types/webpack-hot-middleware": "^2.25.4"
|
"@types/webpack-hot-middleware": "^2.25.4",
|
||||||
|
"unbuild": "^0.1.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { defineNuxtComponent, asyncData } from 'nuxt/app/composables'
|
import { defineNuxtComponent, asyncData } from '@nuxt/app'
|
||||||
const waitFor = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms))
|
const waitFor = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms))
|
||||||
|
|
||||||
export default defineNuxtComponent({
|
export default defineNuxtComponent({
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { useAsyncData } from 'nuxt/app/composables'
|
import { useAsyncData } from '@nuxt/app'
|
||||||
const waitFor = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms))
|
const waitFor = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms))
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
import { readdir } from 'fs/promises'
|
|
||||||
import { resolve } from 'upath'
|
|
||||||
import { build } from './build'
|
|
||||||
|
|
||||||
async function main () {
|
|
||||||
const pkgsDir = resolve(__dirname, '../packages')
|
|
||||||
const pkgs = await readdir(pkgsDir)
|
|
||||||
|
|
||||||
const stub = process.argv.includes('--stub')
|
|
||||||
|
|
||||||
for (const pkg of pkgs) {
|
|
||||||
const rootDir = resolve(pkgsDir, pkg)
|
|
||||||
process.chdir(rootDir)
|
|
||||||
await build(rootDir, stub)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
main().catch(console.error)
|
|
261
scripts/build.ts
261
scripts/build.ts
@ -1,261 +0,0 @@
|
|||||||
import { promisify } from 'util'
|
|
||||||
import { resolve, relative, dirname } from 'path'
|
|
||||||
import Module from 'module'
|
|
||||||
import { writeFile, mkdir, unlink, symlink } from 'fs/promises'
|
|
||||||
import chalk from 'chalk'
|
|
||||||
import consola from 'consola'
|
|
||||||
import rimraf from 'rimraf'
|
|
||||||
import { RollupOptions, OutputOptions, OutputChunk, rollup } from 'rollup'
|
|
||||||
import commonjs from '@rollup/plugin-commonjs'
|
|
||||||
import nodeResolve from '@rollup/plugin-node-resolve'
|
|
||||||
import alias from '@rollup/plugin-alias'
|
|
||||||
import esbuild from 'rollup-plugin-esbuild'
|
|
||||||
import { mkdist } from 'mkdist'
|
|
||||||
import prettyBytes from 'pretty-bytes'
|
|
||||||
import execa from 'execa'
|
|
||||||
import dts from 'rollup-plugin-dts'
|
|
||||||
|
|
||||||
interface BuildEntry {
|
|
||||||
name: string
|
|
||||||
input: string
|
|
||||||
output: string
|
|
||||||
bundle: boolean
|
|
||||||
srcDir: string
|
|
||||||
distDir: string
|
|
||||||
format: 'esm' | 'cjs'
|
|
||||||
}
|
|
||||||
|
|
||||||
interface BuildContext {
|
|
||||||
rootDir: string
|
|
||||||
entries: BuildEntry[]
|
|
||||||
externals: string[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function build (rootDir: string, stub: boolean) {
|
|
||||||
const ctx: BuildContext = {
|
|
||||||
rootDir,
|
|
||||||
entries: [],
|
|
||||||
externals: [...Module.builtinModules]
|
|
||||||
}
|
|
||||||
|
|
||||||
const pkg = require(resolve(ctx.rootDir, 'package.json'))
|
|
||||||
|
|
||||||
const buildOptions = pkg.build || {}
|
|
||||||
if (buildOptions.entries) {
|
|
||||||
if (!Array.isArray(buildOptions.entries)) {
|
|
||||||
buildOptions.entries = Object.entries(buildOptions.entries)
|
|
||||||
}
|
|
||||||
ctx.entries.push(...buildOptions.entries.map(entry => resolveEntry(entry)))
|
|
||||||
}
|
|
||||||
if (pkg.dependencies) {
|
|
||||||
ctx.externals.push(...Object.keys(pkg.dependencies))
|
|
||||||
}
|
|
||||||
if (buildOptions.externals) {
|
|
||||||
ctx.externals.push(...buildOptions.externals)
|
|
||||||
}
|
|
||||||
|
|
||||||
const distDir = resolve(ctx.rootDir, 'dist')
|
|
||||||
await unlink(distDir).catch(() => {})
|
|
||||||
await promisify(rimraf)(distDir)
|
|
||||||
|
|
||||||
if (buildOptions.prebuild) {
|
|
||||||
const [cmd, ...args] = buildOptions.prebuild.split(' ')
|
|
||||||
await execa(cmd, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stub) {
|
|
||||||
const stubbed: string[] = []
|
|
||||||
for (const entry of ctx.entries) {
|
|
||||||
if (entry.bundle) {
|
|
||||||
const input = resolve(ctx.rootDir, entry.input)
|
|
||||||
stubbed.push(entry.output)
|
|
||||||
const output = resolve(ctx.rootDir, entry.output) + '.js'
|
|
||||||
await mkdir(dirname(output)).catch(() => { })
|
|
||||||
const cjsStub = `module.exports = require('jiti')()('${input}')`
|
|
||||||
const esStub = `export * from '${input}'`
|
|
||||||
await writeFile(output, entry.format === 'cjs' ? cjsStub : esStub)
|
|
||||||
await writeFile(output.replace('.js', '.d.ts'), esStub)
|
|
||||||
} else {
|
|
||||||
const outDir = resolve(ctx.rootDir, entry.output)
|
|
||||||
const srcDir = resolve(ctx.rootDir, entry.input)
|
|
||||||
await unlink(outDir).catch(() => { })
|
|
||||||
await symlink(srcDir, outDir)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
consola.info(chalk.cyan(`Building ${pkg.name}`))
|
|
||||||
if (process.env.DEBUG) {
|
|
||||||
consola.info(`
|
|
||||||
${chalk.bold('Root dir:')} ${ctx.rootDir}
|
|
||||||
${chalk.bold('Entries:')}
|
|
||||||
${ctx.entries.map(entry => ' ' + dumpObject(entry)).join('\n')}
|
|
||||||
`)
|
|
||||||
}
|
|
||||||
|
|
||||||
const rollupOptions = getRollupOptions(ctx)
|
|
||||||
const buildEntries: { path: string, bytes?: number, exports?: string[], chunks?: string[] }[] = []
|
|
||||||
const usedImports = new Set<string>()
|
|
||||||
if (rollupOptions) {
|
|
||||||
const buildResult = await rollup(rollupOptions)
|
|
||||||
const outputOptions = rollupOptions.output
|
|
||||||
const { output } = await buildResult.write(outputOptions)
|
|
||||||
|
|
||||||
for (const entry of output.filter(e => e.type === 'chunk') as OutputChunk[]) {
|
|
||||||
for (const id of entry.imports) {
|
|
||||||
usedImports.add(id)
|
|
||||||
}
|
|
||||||
if (entry.isEntry) {
|
|
||||||
buildEntries.push({
|
|
||||||
path: relative(ctx.rootDir, resolve(outputOptions.dir, entry.fileName)),
|
|
||||||
bytes: entry.code.length * 4,
|
|
||||||
exports: entry.exports
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Types
|
|
||||||
rollupOptions.plugins = rollupOptions.plugins || []
|
|
||||||
rollupOptions.plugins.push(dts())
|
|
||||||
const typesBuild = await rollup(rollupOptions)
|
|
||||||
await typesBuild.write(outputOptions)
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const entry of ctx.entries.filter(e => !e.bundle)) {
|
|
||||||
const { writtenFiles } = await mkdist({
|
|
||||||
rootDir: ctx.rootDir,
|
|
||||||
srcDir: entry.input,
|
|
||||||
distDir: entry.output,
|
|
||||||
format: entry.format
|
|
||||||
})
|
|
||||||
buildEntries.push({
|
|
||||||
path: relative(ctx.rootDir, entry.output),
|
|
||||||
chunks: [`${writtenFiles.length} files`]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
consola.success(chalk.green('Build succeed for ' + pkg.name))
|
|
||||||
for (const entry of buildEntries) {
|
|
||||||
consola.log(` ${chalk.bold(entry.path)} (` + [
|
|
||||||
entry.bytes && `size: ${chalk.cyan(prettyBytes(entry.bytes))}`,
|
|
||||||
entry.exports && `exports: ${chalk.gray(entry.exports.join(', '))}`,
|
|
||||||
entry.chunks && `chunks: ${chalk.gray(entry.chunks.join(', '))}`
|
|
||||||
].filter(Boolean).join(', ') + ')')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rollupOptions) {
|
|
||||||
const usedDependencies = new Set<string>()
|
|
||||||
const unusedDependencies = new Set<string>(Object.keys(pkg.dependencies || {}))
|
|
||||||
const implicitDependnecies = new Set<string>()
|
|
||||||
for (const id of usedImports) {
|
|
||||||
unusedDependencies.delete(id)
|
|
||||||
usedDependencies.add(id)
|
|
||||||
}
|
|
||||||
if (Array.isArray(buildOptions.dependencies)) {
|
|
||||||
for (const id of buildOptions.dependencies) {
|
|
||||||
unusedDependencies.delete(id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (const id of usedDependencies) {
|
|
||||||
if (
|
|
||||||
!ctx.externals.includes(id) &&
|
|
||||||
!id.startsWith('chunks/') &&
|
|
||||||
!ctx.externals.includes(id.split('/')[0]) // lodash/get
|
|
||||||
) {
|
|
||||||
implicitDependnecies.add(id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (unusedDependencies.size) {
|
|
||||||
consola.warn('Potential unused dependencies found:', Array.from(unusedDependencies).map(id => chalk.cyan(id)).join(', '))
|
|
||||||
}
|
|
||||||
if (implicitDependnecies.size) {
|
|
||||||
consola.warn('Potential implicit dependencies found:', Array.from(implicitDependnecies).map(id => chalk.cyan(id)).join(', '))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
consola.log('')
|
|
||||||
}
|
|
||||||
|
|
||||||
function resolveEntry (input: string | [string, Partial<BuildEntry>] | Partial<BuildEntry>): BuildEntry {
|
|
||||||
let entry: Partial<BuildEntry>
|
|
||||||
if (typeof input === 'string') {
|
|
||||||
entry = { name: input }
|
|
||||||
} else if (Array.isArray(input)) {
|
|
||||||
entry = { name: input[0], ...input[1] }
|
|
||||||
} else {
|
|
||||||
entry = input
|
|
||||||
}
|
|
||||||
entry.input = entry.input ?? resolve(entry.srcDir || 'src', './' + entry.name)
|
|
||||||
entry.output = entry.output ?? resolve(entry.distDir || 'dist', './' + entry.name)
|
|
||||||
entry.bundle = entry.bundle ?? !(entry.input.endsWith('/') || entry.name?.endsWith('/'))
|
|
||||||
entry.format = entry.format ?? 'esm'
|
|
||||||
return entry as BuildEntry
|
|
||||||
}
|
|
||||||
|
|
||||||
function dumpObject (obj: Record<string, any>) {
|
|
||||||
return '{ ' + Object.keys(obj).map(key => `${key}: ${JSON.stringify(obj[key])}`).join(', ') + ' }'
|
|
||||||
}
|
|
||||||
|
|
||||||
function getRollupOptions (ctx: BuildContext): RollupOptions & { output: OutputOptions & { dir: string }} | null {
|
|
||||||
const extensions = ['.ts', '.mjs', '.js', '.json']
|
|
||||||
|
|
||||||
const r = (...path: string[]) => resolve(ctx.rootDir, ...path)
|
|
||||||
|
|
||||||
const entries = ctx.entries.filter(e => e.bundle)
|
|
||||||
if (!entries.length) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
input: entries.map(e => e.input),
|
|
||||||
|
|
||||||
output: {
|
|
||||||
dir: r('dist'),
|
|
||||||
format: 'cjs',
|
|
||||||
chunkFileNames: 'chunks/[hash].js',
|
|
||||||
exports: 'auto',
|
|
||||||
preferConst: true
|
|
||||||
},
|
|
||||||
|
|
||||||
external (id) {
|
|
||||||
if (id[0] === '.' || id[0] === '/' || id.includes('src/')) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
const isExplicitExternal = !!ctx.externals.find(ext => id.includes(ext))
|
|
||||||
if (!isExplicitExternal) {
|
|
||||||
consola.warn(`Inlining external ${id}`)
|
|
||||||
}
|
|
||||||
return isExplicitExternal
|
|
||||||
},
|
|
||||||
|
|
||||||
onwarn (warning, rollupWarn) {
|
|
||||||
if (!warning.code || !['CIRCULAR_DEPENDENCY'].includes(warning.code)) {
|
|
||||||
rollupWarn(warning)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
alias({
|
|
||||||
entries: {
|
|
||||||
src: resolve(__dirname, 'src')
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
|
|
||||||
nodeResolve({
|
|
||||||
extensions
|
|
||||||
}),
|
|
||||||
|
|
||||||
esbuild({
|
|
||||||
target: 'node12',
|
|
||||||
loaders: {
|
|
||||||
'.json': 'json'
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
|
|
||||||
commonjs({
|
|
||||||
extensions
|
|
||||||
})
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
"moduleResolution": "Node",
|
"moduleResolution": "Node",
|
||||||
@ -10,9 +11,7 @@
|
|||||||
"types": [
|
"types": [
|
||||||
"node",
|
"node",
|
||||||
"jest"
|
"jest"
|
||||||
],
|
]
|
||||||
"paths": {
|
},
|
||||||
"nuxt/app/composables": ["./packages/app/src/composables"]
|
"exclude": ["./packages/*/dist/*"]
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user