vue + ts 打包发布至npm/yarn私服

22 篇文章 0 订阅

背景

前两天突然接到任务,说:‘玉玺啊,你加入到xxx的开发中区,先完成一个打包发布并配合xx老师联调一下’,我说好的,但是~问题来了,此前我的代码并没有写过类似的打包的配置,当天下午就是两眼一抹黑,看了一下午,尝试了许多种解决方案,但是都没能解决。最后到了晚上,我突然想起公司的其他项目也有需要打包发布的,我立马去查看,欸!!经过不断的尝试,还是写出来了。

方案一

使用typescript的原生打包命令tsc,当然使用这个命令的前提是执行npm install typescript [-g]这条命令下去下载并安装,像这样
下载并安装typescript
然后使用tsc -v命令查看我们安装的版本,在自己的项目中找到tsconfig.js,或者新建tsconfig.js文件,并加入一些属性,接下来demo展示。

{
  "compilerOptions": {
    "target": "esnext", // 目标语言的版本
    "module": "esnext", // 生成代码的模板标准
    "strict": true, // 是否开启严格模式
    "importHelpers": true, // 通过tslib引入helper函数,文件必须是模块
    "moduleResolution": "node",  // 模块解析策略
    "experimentalDecorators": true, //实验装饰器
    "skipLibCheck": true, // 跳过 Lib 检查    
	"esModuleInterop": true, // 允许export=导出,由import from 导入
    "allowSyntheticDefaultImports": true, // 允许合成默认导入
    "resolveJsonModule": true, //是否开启解析json模块
    "sourceMap": true, // 生成目标文件的sourceMap文件
    "baseUrl": ".", // 解析非相对模块地址,默认是当前目录
    "outDir": "./dist", // 打包输出路径
    "declaration": true, // 是否生成声明文件
    "types": [
      "webpack-env"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx",
    "src/config/index.ts",
    "typings"
  ],
  "exclude": [
    "node_modules",
    "/Users/xujinxing/zuoyebang/mis-square-sdk"
  ]
}
属性类型描述
filesarray需要编译的文件
includearray需要编译的文件或目录
excludearray不需要编译的文件或目录如node_module
extendssrting继承其他文件的配置
compilerOptionsobject编译选项,此属性配置非常多,仅解释demo(无则使用默认)
compileOnSaveboolean保存自动编译

此种方案虽然是能够将项目打包,但我在其他项目引入的时候,控制台提示我,需要安装此依赖,所以这种方案被干掉了。

方案二

使用vue-cli集成的webpack来打包,当然你需要看一下你的项目的vue-cli的版本vue-cli3创建的vue工程是默认集成了webpack的配置,我这里是默认集成,所以我们只需要去修改vue.config.js即可,接下来demo展示.

const { join } = require('path')

const isProduct = ['production', 'prod'].includes(process.env.NODE_ENV)
const isLib = ['lib'].includes(process.env.NODE_TYPE)

module.exports = {
  // 入口文件等配置
  pages: {
    index: {
      // page入口文件
      entry: 'src/main.ts',
      // 模板来源
      template: 'public/index.html',
      // dist 文件输出名
      filename: 'index.html',
      // 模板标签
      title: 'test'
    }
  },
  css: {
  	// 是否将css 独立提取至文件中
    extract: true, 
    // 使用loader解析less
    loaderOptions: {
      less: {
        javascriptEnabled: true
      }
    }
  },
  chainWebpack: (config) => {
    config.module
      .rule('.js')
      .include.add(join(process.cwd(), 'src'))
      .end();
    config.module
      .rule('js')
      .include.add(/packages/)
      .end()
      .use('babel')
      .loader('babel-loader')
      .tap((options) => {
        return options;
      });
    config.module // 压缩图片
      .rule("images")
      .use("image-webpack-loader")
      .loader("image-webpack-loader")
      .options({
        mozjpeg: { progressive: true, quality: 65 },
        optipng: { enabled: false },
        pngquant: { quality: "65-90", speed: 4 },
        gifsicle: { interlaced: false },
        webp: { quality: 75 }
      });
  },
  configureWebpack: (config) => {
    if (isProduct && isLib) {
      config.externals = {
        vue: 'Vue',
        'element-ui': 'element-ui',
        'axios': 'axios'
      };
    }
  },
  // 服务配置如端口
  devServer: {
    port: 8800, // 端口
    // eslint 报错遮盖页面
    overlay: {
      warnings: true,
      errors: true
    },
    proxy: 'http://localhost:4000'
  }
}

虽然写了webpack的配置,我打包发布后,在另外一个项目测试,项目提示三个错误,可能有loader版本过高导致的问题,请检查下载的loader版本,最后一种方法也是使用的此文件,所以打包失败了,也请先不要删除。

App.vue not found 
this.getOption not function
xxx.less not found

此处未放图是因为电脑重启了,方案二的实验没找到,就没截到图

方案三

其实就是前两个的合并,这需要求修改一下package.json 文件里的 script属性中的build属性变成vue-cli-service build && tsc这样,但是这种方案试过之后还是和方案二的报错是一致的,可能是我太菜了,导致也不知道webpack打包编译后有not found这种错误如何解决。这里也是希望大佬看到有指点指点。
在这里插入图片描述

方案四

script属性中增加 lib属性,属性值如下所示 vue-cli-service build --target lib --name test --dist dist src/index.ts
--target 声明打包类型为lib
--name 包名
--dist 打包输出目录
[path] 入口文件

此方案可以成功的将我的工程打包,发布后也没有bug。

发布

发布至npm,首先我们要登录到npm执行npm login命令登录,使用npm puhlish命令发布如下所示在这里插入图片描述

总结

遇事不要慌。。慢慢来,是问题总会有解决方案的。希望各位大佬指点一二

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值