//这个文件会帮我们打包packages下的所有文件,最终打包出js文件
// node scripts/dev.js 要打包的名字 -f 打包的格式
import minimist from 'minimist'
import { resolve,dirname } from 'path'
import { fileURLToPath } from 'url'
//node中命令参数获取process.argv,前两个不要 参数1执行的命令,数2执行的文件,后面才是参数
const args = minimist(process.argv.slice(2))
const target = args._[0] || 'web' //打包哪个项目,不传给个默认值web
// console.log(target)
const format = args.f || 'iife' //打包格式,不传给个默认值global
console.log(target, format) //输出 =》reactivity esm
import { createRequire } from 'module'
/* esm模块使用cmj变量
*获取打包的入口文件
*node esm模块没有__dirname, 运行pnpm run dev报错 __dirname is not defined in ES module scope
*需要自己解析
*获取当前文件的绝对路径,但开头是file: -> 要转为/xx/xx ,通过dirname获取 */
const __filename=fileURLToPath(import.meta.url)
const __dirname=dirname(__filename)
//C:\Users\some8\Desktop\yuanma\Vue\scripts
const require=createRequire(import.meta.url)
console.log(require)
//入口文件,根据命令提供的路径进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts}`)
console.log(import.meta.url)
file:///C:/Users/some8/Desktop/yuanma/Vue/scripts/dev.js
带file开头的绝对路径
const __filename=fileURLToPath(import.meta.url)
console.log(__filename)
C:\Users\some8\Desktop\yuanma\Vue\scripts\dev.js
#获取当前文件
const __dirname=dirname(__filename)
console.log(__dirname)
C:\Users\some8\Desktop\yuanma\Vue\scripts
#获取当前文件目录
需要手动处理
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and 'C:\Users\some8\Desktop\yuanma\Vue\package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
import { createRequire } from 'module'
既可以用esm写法也可以用以前cjs写法,相当于做了兼容处理
const require=createRequire(import.meta.url)
console.log(require)
> vue3-lesson@1.0.0 dev C:\Users\some8\Desktop\yuanma\Vue
> node scripts/dev.js reactivity -f esm
reactivity esm
[Function: require] {
resolve: [Function: resolve] { paths: [Function: paths] },
main: undefined,
extensions: [Object: null prototype] {
'.js': [Function (anonymous)],
'.json': [Function (anonymous)],
'.node': [Function (anonymous)]
},
cache: [Object: null prototype] {
'C:\\Users\\some8\\Desktop\\yuanma\\Vue\\node_modules\\.pnpm\\minimist@1.2.8\\node_modules\\minimist\\index.js': {
id: 'C:\\Users\\some8\\Desktop\\yuanma\\Vue\\node_modules\\.pnpm\\minimist@1.2.8\\node_modules\\minimist\\index.js',
path: 'C:\\Users\\some8\\Desktop\\yuanma\\Vue\\node_modules\\.pnpm\\minimist@1.2.8\\node_modules\\minimist',
exports: [Function (anonymous)],
filename: 'C:\\Users\\some8\\Desktop\\yuanma\\Vue\\node_modules\\.pnpm\\minimist@1.2.8\\node_modules\\minimist\\index.js',
loaded: true,
children: [],
paths: [Array]
}
}
}