diff --git a/index.js b/index.js
index da48320..4526d3b 100755
--- a/index.js
+++ b/index.js
@@ -7,15 +7,17 @@
*/
import { join } from 'path'
-import { createServer } from './lib/index.js'
+import { createServer, compile } from './lib/index.js'
const WORK_SPACE = process.env.INIT_CWD
+const CONFIG_FILE = join(WORK_SPACE, 'vue.live.js')
+
let args = process.argv.slice(2)
switch (args[0]) {
case 'dev':
- import(join(WORK_SPACE, 'vue.live.js'))
+ import(CONFIG_FILE)
.then(function (conf) {
// console.log(conf)
createServer(WORK_SPACE, conf.default)
@@ -26,5 +28,13 @@ switch (args[0]) {
break
case 'build':
+ import(CONFIG_FILE)
+ .then(function (conf) {
+ // console.log(conf)
+ compile(WORK_SPACE, conf.default)
+ })
+ .catch(err => {
+ console.log('Import Error:', err)
+ })
break
}
diff --git a/lib/dev.js b/lib/dev.js
new file mode 100644
index 0000000..b730fd8
--- /dev/null
+++ b/lib/dev.js
@@ -0,0 +1,195 @@
+import http from 'http'
+import fs from 'iofs'
+import { join, resolve,dirname } from 'path'
+import { parse } from 'url'
+
+import { compileScss, parseJs, compileVue } from './compile-vue.js'
+
+import MIME_TYPES from './mime-tpyes.js'
+import { COMMON_HEADERS } from './constants.js'
+
+const decode = decodeURIComponent
+
+export default function createServer(root = '', conf = {}) {
+ let pagesDir = ''
+ let indexPage = Object.keys(conf.pages).map(it => {
+ let tmp = it + '.html'
+ return `
${tmp}`
+ }).join('')
+
+ let currentPage = ''
+
+ http
+ .createServer(function (req, res) {
+ let pathname = parse(req.url.slice(1)).pathname
+ let isIndex = pathname === ''
+
+ for (let k in COMMON_HEADERS) {
+ res.setHeader(k, COMMON_HEADERS[k])
+ }
+
+
+
+ if (isIndex) {
+ res.setHeader('content-type', MIME_TYPES.html)
+ res.writeHead(200, 'OK')
+ res.end('')
+ } else {
+ res.setHeader('accept-ranges', 'bytes')
+
+ let tmp = pathname.split('.')
+ let ext = tmp.pop()
+ let page = tmp.join('.')
+
+ let code = ''
+
+ console.log(req);
+
+ return res.end(JSON.stringify({url: req.url,ext, page}))
+
+ switch (ext) {
+ case 'html':
+ {
+ let entry = fs.cat(join(pagesDir, page, 'main.js')).toString()
+ let fixedStyle = '\n\n'
+
+ currentPage = page
+
+ res.setHeader('content-type', MIME_TYPES.html)
+
+ entry = entry
+ .replace(/import (.*?) from (["'])(.*?)\2/g, function (m, alias, q, name) {
+ if (name.startsWith('@/')) {
+ name = name.replace('@/', '/aseets/js/')
+ }
+
+ if (!conf.imports[name]) {
+ if (name.startsWith('./')) {
+ name = name.replace('./', `/aseets/js/${currentPage}/`)
+ } else if (name.startsWith('/') && !name.startsWith('/aseets/js/')) {
+ name = name.replace(/^\//, '/aseets/js/')
+ }
+
+ if (!name.endsWith('.js') && !name.endsWith('.vue')) {
+ name += '.js'
+ }
+ }
+ return `import ${alias} from '${name}'`
+ })
+ .replace(/import (["'])(.*?)\1/g, function (m, q, name) {
+ if (name.endsWith('.css') || name.endsWith('.scss')) {
+ if (name.startsWith('@/')) {
+ name = name.replace('@/', '/aseets/css/')
+ }
+ let tmp = `style${Date.now()}`
+ fixedStyle += `document.adoptedStyleSheets.push(${tmp})\n`
+
+ return `import ${tmp} from '${name}' assert { type: 'css' }`
+ } else {
+ if (name.startsWith('@/')) {
+ name = name.replace('@/', '/aseets/js/')
+ }
+ // console.log(name, conf.imports[name])
+ if (!conf.imports[name]) {
+ if (!name.startsWith('/') && !name.startsWith('./')) {
+ name = '/' + name
+ }
+
+ if (!name.endsWith('.js') && !name.endsWith('.vue')) {
+ name += '.js'
+ }
+ }
+ return `import '${name}'`
+ }
+ })
+
+ entry += fixedStyle
+
+ code = fs.cat('./index.html').toString()
+ code = code
+ .replace(
+ '',
+ ""
+ )
+ .replace('{{importmap}}', JSON.stringify({ imports: conf.imports }))
+ .replace(
+ '',
+ ``
+ )
+ }
+
+ break
+
+ case 'vue':
+ {
+ pathname = pathname.replace(/^aseets\/js\//, '')
+ let file
+
+ if (pathname.startsWith(currentPage)) {
+ file = join(conf.pages, pathname)
+ } else {
+ file = join(root, pathname)
+ }
+
+ if (!fs.isfile(file)) {
+ file = file.replace(/\.vue$/, '/index.vue')
+ }
+
+ // console.log('>>>>', file)
+ code = compileVue(file)
+
+ res.setHeader('content-type', MIME_TYPES.js)
+ }
+ break
+
+ case 'scss':
+ case 'css':
+ {
+ let file = join(root, pathname.replace(/^aseets\/css\//, ''))
+ code = compileScss(file)
+ res.setHeader('content-type', MIME_TYPES.css)
+ }
+ break
+
+ case 'js':
+ {
+ pathname = pathname.replace(/^aseets\/js\//, '')
+ let file
+ if (pathname.startsWith(currentPage)) {
+ file = join(conf.pages, pathname)
+ } else {
+ file = join(root, pathname)
+ }
+ if (fs.isfile(file)) {
+ code = fs.cat(file)
+ } else {
+ file = file.replace(/\.js$/, '/index.js')
+ code = fs.cat(file)
+ }
+ console.log(req.url, '>>>>', file)
+ code = parseJs(code + '')
+ res.setHeader('content-type', MIME_TYPES.js)
+ }
+
+ break
+
+ default:
+ res.setHeader('content-type', MIME_TYPES[ext] || MIME_TYPES.other)
+ break
+ }
+
+ res.setHeader('content-length', Buffer.byteLength(code))
+ res.writeHead(200, 'OK')
+ res.end(code + '')
+ }
+ })
+ .listen(conf.port)
+ .on('error', err => {
+ console.log(`${conf.port}端口被占用~~~`)
+ conf.port++
+ createServer()
+ })
+ .on('listening', _ => {
+ console.log('启动成功, 请访问', 'http://127.0.0.1:' + conf.port)
+ })
+}
diff --git a/lib/index.js b/lib/index.js
index bb2dbfc..5878d34 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -4,197 +4,7 @@
* @date 2022/08/31 18:00:37
*/
-import http from 'http'
-import fs from 'iofs'
-import { join, resolve } from 'path'
-import { parse } from 'url'
-// import conf from './live.config.js'
+import createServer from './dev.js'
+import compile from './prod.js'
-import { compileScss, parseJs, compileVue } from './compile-vue.js'
-
-import MIME_TYPES from './mime-tpyes.js'
-import { COMMON_HEADERS } from './constants.js'
-
-const decode = decodeURIComponent
-
-/* ------------------------------- */
-
-export function createServer(root = '', conf = {}) {
- let pagesDir = resolve(conf.pages)
- let pages = fs.ls(pagesDir).map(it => {
- let tmp = it.slice(pagesDir.length + 1) + '.html'
- return `${tmp}`
- })
-
- let currentPage = ''
-
- http
- .createServer(function (req, res) {
- let pathname = parse(req.url.slice(1)).pathname || 'index.html'
-
- // console.log(req.url, pathname, parse(req.url.slice(1)))
- let isIndex = pathname === 'index.html'
-
- for (let k in COMMON_HEADERS) {
- res.setHeader(k, COMMON_HEADERS[k])
- }
-
- let tmp = pathname.split('.')
- let ext = tmp.pop()
- let page = tmp.join('.')
-
- if (isIndex) {
- res.setHeader('content-type', MIME_TYPES.html)
- res.writeHead(200, 'OK')
- res.end('')
- } else {
- res.setHeader('accept-ranges', 'bytes')
-
- let code = ''
-
- switch (ext) {
- case 'html':
- {
- let entry = fs.cat(join(pagesDir, page, 'main.js')).toString()
- let fixedStyle = '\n\n'
-
- currentPage = page
-
- res.setHeader('content-type', MIME_TYPES.html)
-
- entry = entry
- .replace(/import (.*?) from (["'])(.*?)\2/g, function (m, alias, q, name) {
- if (name.startsWith('@/')) {
- name = name.replace('@/', '/aseets/js/')
- }
-
- if (!conf.imports[name]) {
- if (name.startsWith('./')) {
- name = name.replace('./', `/aseets/js/${currentPage}/`)
- } else if (name.startsWith('/') && !name.startsWith('/aseets/js/')) {
- name = name.replace(/^\//, '/aseets/js/')
- }
-
- if (!name.endsWith('.js') && !name.endsWith('.vue')) {
- name += '.js'
- }
- }
- return `import ${alias} from '${name}'`
- })
- .replace(/import (["'])(.*?)\1/g, function (m, q, name) {
- if (name.endsWith('.css') || name.endsWith('.scss')) {
- if (name.startsWith('@/')) {
- name = name.replace('@/', '/aseets/css/')
- }
- let tmp = `style${Date.now()}`
- fixedStyle += `document.adoptedStyleSheets.push(${tmp})\n`
-
- return `import ${tmp} from '${name}' assert { type: 'css' }`
- } else {
- if (name.startsWith('@/')) {
- name = name.replace('@/', '/aseets/js/')
- }
- // console.log(name, conf.imports[name])
- if (!conf.imports[name]) {
- if (!name.startsWith('/') && !name.startsWith('./')) {
- name = '/' + name
- }
-
- if (!name.endsWith('.js') && !name.endsWith('.vue')) {
- name += '.js'
- }
- }
- return `import '${name}'`
- }
- })
-
- entry += fixedStyle
-
- code = fs.cat('./index.html').toString()
- code = code
- .replace(
- '',
- ""
- )
- .replace('{{importmap}}', JSON.stringify({ imports: conf.imports }))
- .replace(
- '',
- ``
- )
- }
-
- break
-
- case 'vue':
- {
- pathname = pathname.replace(/^aseets\/js\//, '')
- let file
-
- if (pathname.startsWith(currentPage)) {
- file = join(conf.pages, pathname)
- } else {
- file = join(root, pathname)
- }
-
- if (!fs.isfile(file)) {
- file = file.replace(/\.vue$/, '/index.vue')
- }
-
- // console.log('>>>>', file)
- code = compileVue(file)
-
- res.setHeader('content-type', MIME_TYPES.js)
- }
- break
-
- case 'scss':
- case 'css':
- {
- let file = join(root, pathname.replace(/^aseets\/css\//, ''))
- code = compileScss(file)
- res.setHeader('content-type', MIME_TYPES.css)
- }
- break
-
- case 'js':
- {
- pathname = pathname.replace(/^aseets\/js\//, '')
- let file
- if (pathname.startsWith(currentPage)) {
- file = join(conf.pages, pathname)
- } else {
- file = join(root, pathname)
- }
- if (fs.isfile(file)) {
- code = fs.cat(file)
- } else {
- file = file.replace(/\.js$/, '/index.js')
- code = fs.cat(file)
- }
- console.log(req.url, '>>>>', file)
- code = parseJs(code + '')
- res.setHeader('content-type', MIME_TYPES.js)
- }
-
- break
-
- default:
- res.setHeader('content-type', MIME_TYPES[ext] || MIME_TYPES.other)
- break
- }
-
- res.setHeader('content-length', Buffer.byteLength(code))
- res.writeHead(200, 'OK')
- res.end(code + '')
- }
- })
- .listen(conf.port)
- .on('error', err => {
- console.log(`${conf.port}端口被占用~~~`)
- conf.port++
- createServer()
- })
- .on('listening', _ => {
- console.log('启动成功, 请访问', 'http://127.0.0.1:' + conf.port)
- })
-}
+export { createServer, compile }
diff --git a/lib/prod.js b/lib/prod.js
new file mode 100644
index 0000000..fa54f7a
--- /dev/null
+++ b/lib/prod.js
@@ -0,0 +1,5 @@
+/* ------------------------------- */
+
+export default function compile(root = '', conf = {}) {
+ //
+}