开导:
有个原生 js 的项目, 因为要使用第三方插件,还只支持 npm 的方式引入(求此处心里阴影面积),不要问为什么只能npm 的方式安装插件,因为插件本身依赖也很多,所以不支持script,就算支持,也得引入很多东西,还容易引入不需要的依赖(慌!!!),下张图可能导致不适,请别看。
怎么解决?
首先请保证你的电脑有以下条件: 一台能用的电脑,node.js (npm) 环境, 代码编辑工具。
我使用的是 yarn ,和 npm 区别不是很大。
1. 创建一个文件夹。 我的依赖很多。 但是js 文件就1个。 所以我就创建了一个文件夹, 如果js 多的话,也可以使用开发工具创建空项目。
2. 控制台执行 yarn init / npm init。 初始化 package.json。 不解释,你们都懂的。
3. 控制台执行 webpack -v ,这里是检测你是否安装了全局 webpack ,安装了会得到版本号,未安装会提示不是可执行命令。 那么就需要安装了。
npm install -g webpack / yarn global add webpack
// 安装完成后,再执行一下 上面命令,得到版本号就可以进行下一步了,
// 这里安装完成,可能还需要重启命令行,未成功请尝试此操作。
4. 安装你需要的 依赖。【这里我已我的项目场景演示】
yarn add uuid protobufjs // 安装完成依赖,就可以进行你的插件js 编写了。
我只使用了这两个。
5. 新建一个index.js 文件,编写你的逻辑代码。下面是我的代码示例。
有个坑:导出的插件js 必须 export default ,不然你使用 script 使用时,会得到 undefined。请注意。
6. 编写完成,就应该打包了, 创建一个webpack的配置文件,命名为【webpack.config.js】。
为了方便理解。 先贴一张项目目录的图。
var path = require("path"); // webpack 内部依赖。可不管。
module.exports = {
entry: {
index: path.join(__dirname, 'index.js'), // 这里是入口文件。 可多个引入
// 多个文件引入示例
// home: path.join(_dirname, 'home.js')
// _dirname webpack 全局变量,代表当前项目目录。
// 这里必须使用 webpack 的 path,指定当前目录
// ,不然就会默认读C 盘根目录。踩过坑,请注意。
},
output: {
path: path.join(__dirname, '/dist'), // 输出目录,使用过vue的 应该很熟悉了。
filename: 'ImClientService.js', // 输出文件 名称
libraryExport: "default", // 添加这个的意思,标记该js文件可支持 improt 引入。
// 下面两个是结合使用的。
libraryTarget: "umd" // 标签名总4个。详细文档参见 【webpck library 配置文档】
// 1\. UMD:在 AMD 或 CommonJS require 之后可访问
// 2\. window:在浏览器中通过 window 对象访问
// 3\. this:通过 this 对象访问
// 4\. 变量:作为一个全局变量,通过 script 标签来访问
library: "ImClientService", // 引入全局名称。 这里的设置,和script 中的调用名是对应的。
}
}
webpack 的配置就完成了。 现在就可以输出库文件了。
7. 输出库文件
直接调用 webpack 即可, 会在项目目录的 dist 文件得到你的库文件。
一切配置正常,就可得到下面这些信息。
下面的提示信息大致就说你没有指定模式。这里没有什么用,所以我就没有填写。
8. 如何使用。
<script type="text/javascript" src="./libs/ImClientService.js"></script> // 直接引入即可
chat.js 文件:
let imClientService = new ImClientService('ws://***:**/**', './libs/SVPro.proto');