Sfoglia il codice sorgente

Merge branch 'master' into vue-test

jcq 2 settimane fa
parent
commit
4c05b68325
4 ha cambiato i file con 108 aggiunte e 16 eliminazioni
  1. 72 0
      README.md
  2. 29 10
      package-lock.json
  3. 2 1
      package.json
  4. 5 5
      pnpm-lock.yaml

+ 72 - 0
README.md

@@ -179,3 +179,75 @@ new UtmTracker({
 
 如需更多帮助或定制返回内容,请联系作者。
 
+## 配置项说明(config 参数)
+
+| 配置项      | 类型     | 说明                                                         | 是否必填 | 默认值                      |
+|-------------|----------|--------------------------------------------------------------|----------|-----------------------------|
+| reportUrl   | string   | 上报数据的接口地址                                           | 是       | ''                          |
+| autoSend    | boolean  | 是否在实例化时自动上报一次                                   | 否       | true                       |
+| method      | string   | 请求方式,支持 'POST' 或 'GET'                               | 否       | 'POST'                     |
+| headers     | object   | 请求头设置                                                   | 否       | { 'Content-Type': 'application/json' } |
+| extra       | object   | 额外自定义参数,会合并进最终上报数据                         | 否       | {}                          |
+| onParams    | function | 获取参数后回调,参数为 params                                 | 否       | null                        |
+| onSend      | function | 发送成功回调,参数为 (response, params)                      | 否       | null                        |
+| onError     | function | 发送失败回调,参数为 (error, params)                         | 否       | null                        |
+
+### 示例
+
+```js
+import UtmTracker from 'utm-params-extractor-test';
+
+const tracker = new UtmTracker({
+  reportUrl: 'https://your-server.com/collect',
+  autoSend: false,
+  method: 'POST',
+  headers: { 'Content-Type': 'application/json' },
+  extra: { foo: 'bar' },
+  onParams: params => console.log(params),
+  onSend: (res, params) => console.log('sent', res, params),
+  onError: (err, params) => console.error('error', err, params)
+});
+```
+
+## 浏览器指纹(fingerprintId)说明
+
+- `fingerprintId` 字段会自动添加到所有 UTM 参数和上报数据中。
+- 该字段用于唯一标识当前浏览器环境,便于后端做用户去重、分析等。
+- 指纹生成后会存储在本地 localStorage(key: fingerprint_id),后续请求会优先复用,确保唯一性和高效性。
+- **本包已自动集成 [FingerprintJS](https://github.com/fingerprintjs/fingerprintjs),无需单独安装或引入,无论 npm 还是浏览器全局都能直接用指纹功能。**
+
+### 示例
+
+```js
+const tracker = new UtmTracker({ ... });
+const params = await tracker.getParamsAsync();
+console.log(params.fingerprintId); // 浏览器唯一指纹
+```
+
+## FingerprintJS 依赖说明
+
+本库自动适配两种场景:
+
+### 1. npm/打包工具用户
+- 请在你的项目中安装依赖:
+  ```bash
+  npm install @fingerprintjs/fingerprintjs
+  ```
+- 本库会自动 require 该依赖,无需手动引入。
+- 推荐在 package.json 中声明 peerDependencies:
+  ```json
+  "peerDependencies": {
+    "@fingerprintjs/fingerprintjs": ">=4.0.0"
+  }
+  ```
+
+### 2. 浏览器全局用户
+- 请在你的 HTML 中**先**引入 FingerprintJS,再引入本库:
+  ```html
+  <script src="https://openfpcdn.io/fingerprintjs/v4"></script>
+  <script src="dist/your-utm-bundle.js"></script>
+  ```
+- 本库会自动检测 window.FingerprintJS。
+
+如未正确引入依赖,指纹功能将无法使用,fingerprintId 字段会为空字符串。
+

+ 29 - 10
package-lock.json

@@ -1,15 +1,16 @@
 {
-  "name": "utm-params-extractor",
-  "version": "1.0.0",
+  "name": "utm-params-extractor-test",
+  "version": "1.0.12",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "utm-params-extractor",
-      "version": "1.0.0",
+      "name": "utm-params-extractor-test",
+      "version": "1.0.12",
       "license": "MIT",
       "dependencies": {
-        "utm-params-extractor": "^1.0.0"
+        "@fingerprintjs/fingerprintjs": "^4.6.2",
+        "utm-params-extractor-test": "^1.0.0"
       },
       "devDependencies": {
         "@babel/core": "^7.27.7",
@@ -1530,6 +1531,15 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/@fingerprintjs/fingerprintjs": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/@fingerprintjs/fingerprintjs/-/fingerprintjs-4.6.2.tgz",
+      "integrity": "sha512-g8mXuqcFKbgH2CZKwPfVtsUJDHyvcgIABQI7Y0tzWEFXpGxJaXuAuzlifT2oTakjDBLTK4Gaa9/5PERDhqUjtw==",
+      "license": "BUSL-1.1",
+      "dependencies": {
+        "tslib": "^2.4.1"
+      }
+    },
     "node_modules/@jridgewell/gen-mapping": {
       "version": "0.3.11",
       "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.11.tgz",
@@ -3433,6 +3443,12 @@
         }
       }
     },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD"
+    },
     "node_modules/undici-types": {
       "version": "7.8.0",
       "resolved": "https://mirrors.cloud.tencent.com/npm/undici-types/-/undici-types-7.8.0.tgz",
@@ -3515,11 +3531,14 @@
         "browserslist": ">= 4.21.0"
       }
     },
-    "node_modules/utm-params-extractor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/utm-params-extractor/-/utm-params-extractor-1.0.0.tgz",
-      "integrity": "sha512-hHDp0uOuwX0iL6cgIh1XQTpDBkidZtxhqgpwBTyMr1EJCYCCWSgbg/lG97wKLFyWs1qkzMVenww/1QxTdpcHBQ==",
-      "license": "MIT"
+    "node_modules/utm-params-extractor-test": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/utm-params-extractor-test/-/utm-params-extractor-test-1.0.12.tgz",
+      "integrity": "sha512-LedkLpHrGvxSSvS0xd4ValR9k31rLCie9Ywo0P0B9cHyf2dtT0prfkublM7L5c5J5eqAdnuNNWqq7y/dDvfRww==",
+      "license": "MIT",
+      "dependencies": {
+        "utm-params-extractor-test": "^1.0.0"
+      }
     },
     "node_modules/watchpack": {
       "version": "2.4.4",

+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "utm-params-extractor-test",
-  "version": "1.0.10",
+  "version": "1.0.12",
   "description": "Extract UTM parameters from URL and browser information",
   "main": "dist/main.js",
   "scripts": {
@@ -28,6 +28,7 @@
   "author": "Jiachen",
   "license": "MIT",
   "dependencies": {
+    "@fingerprintjs/fingerprintjs": "^4.6.2",
     "utm-params-extractor-test": "^1.0.0"
   },
   "types": "index.d.ts"

+ 5 - 5
pnpm-lock.yaml

@@ -8,9 +8,9 @@ importers:
 
   .:
     dependencies:
-      utm-params-extractor:
+      utm-params-extractor-test:
         specifier: ^1.0.0
-        version: 1.0.2
+        version: 1.0.12
     devDependencies:
       '@babel/core':
         specifier: ^7.27.7
@@ -1180,8 +1180,8 @@ packages:
     peerDependencies:
       browserslist: '>= 4.21.0'
 
-  [email protected]:
-    resolution: {integrity: sha512-lIix4mFjQItTn3uTOXpBH2B2R8sM5Xa8lytaO9cbOFHWTt7DIAsh6A2MnUugfQv2plIzZu2uK5j3cKoHkMHGCg==}
+  utm-params-extractor-test@1.0.12:
+    resolution: {integrity: sha512-LedkLpHrGvxSSvS0xd4ValR9k31rLCie9Ywo0P0B9cHyf2dtT0prfkublM7L5c5J5eqAdnuNNWqq7y/dDvfRww==}
 
   [email protected]:
     resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
@@ -2495,7 +2495,7 @@ snapshots:
       escalade: 3.2.0
       picocolors: 1.1.1
 
-  [email protected]: {}
+  utm-params-extractor-test@1.0.12: {}
 
   [email protected]:
     dependencies: