@taro-minify-pack/plugin-remote-assets 0.0.4 → 0.0.5-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ## @taro-minify-pack/plugin-remote-assets
2
2
  > 自动上传资源文件并替换路径
3
3
  >
4
- > 注:由于 `@tarojs/webpack5-runner` 不支持绝对路径注册 `postcss` 插件注册注册,已向`Taro`官方提交[pullRequest](https://github.com/NervJS/taro/pull/18683),有需要的可以参考[pullRequest](https://github.com/NervJS/taro/pull/18683/files)自行 patch
4
+ > 注:`Taro`版本低于`4.0.10`由于`@tarojs/webpack5-runner`不支持绝对路径注册`postcss`插件注册注册,需要参考[pullRequest](https://github.com/NervJS/taro/pull/18683/files)自行 patch
5
5
 
6
6
 
7
7
  ### 安装
package/dist/index.js CHANGED
@@ -31,34 +31,29 @@ const upload_assets_1 = require("./upload-assets");
31
31
  const utils_1 = require("./utils");
32
32
  const path_transform_1 = require("./path-transform/path-transform");
33
33
  __exportStar(require("./upload-adapter"), exports);
34
- const cacheFilePath = path_1.default.resolve(__dirname, 'remote-assets-cache.json');
34
+ const cacheFilePath = path_1.default.resolve(process.cwd(), 'node_modules', '.cache/remote-assets-cache.json');
35
35
  exports.default = (ctx, pluginOpts) => {
36
36
  const transform = (0, path_transform_1.pathTransform)({ cacheFilePath, pathAlias: pluginOpts.pathAlias || {} });
37
37
  ctx.onBuildStart(() => __awaiter(void 0, void 0, void 0, function* () {
38
38
  const { assetsDirPath, uploader } = pluginOpts;
39
- const remoteAssetInfoList = yield (0, upload_assets_1.uploadAssets)({ assetsDirPath, upload: uploader });
39
+ const cacheData = (0, utils_1.getCacheData)(cacheFilePath);
40
+ const remoteAssetInfoList = yield (0, upload_assets_1.uploadAssets)({ assetsDirPath, cacheData, upload: uploader });
40
41
  const remoteAssetInfoMap = remoteAssetInfoList.reduce((result, item) => {
41
42
  return Object.assign(Object.assign({}, result), { [item.localPath]: item.remoteUrl });
42
- }, {});
43
+ }, cacheData);
43
44
  (0, utils_1.saveCacheData)(cacheFilePath, remoteAssetInfoMap);
44
45
  }));
45
46
  ctx.modifyRunnerOpts((curRunnerOpts) => {
46
47
  const { postcss: curPostcssOpts } = curRunnerOpts.opts;
47
- curRunnerOpts.opts.postcss = Object.assign(Object.assign({}, curPostcssOpts), { [path_1.default.resolve(__dirname, './path-transform/path-transform-postcss')]: {
48
- enabled: true,
49
- config: { transform }
50
- } });
48
+ const postCssPluginPathTransformPath = path_1.default.resolve(__dirname, './path-transform/path-transform-postcss');
49
+ curRunnerOpts.opts.postcss = Object.assign(Object.assign({}, curPostcssOpts), { [postCssPluginPathTransformPath]: { enabled: true, config: { transform } } });
51
50
  });
52
51
  ctx.modifyWebpackChain(({ chain }) => {
53
52
  const babelPluginPathTransformPath = path_1.default.resolve(__dirname, './path-transform/path-transform-babel');
54
53
  chain.module
55
54
  .rule('script')
56
55
  .use('babelLoader')
57
- .options({
58
- plugins: [
59
- [babelPluginPathTransformPath, { transform }]
60
- ]
61
- });
56
+ .options({ plugins: [[babelPluginPathTransformPath, { transform }]] });
62
57
  });
63
58
  };
64
59
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAuB;AAGvB,mDAA8C;AAC9C,mCAAuC;AACvC,oEAA+D;AAI/D,mDAAgC;AAEhC,MAAM,aAAa,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;AAEzE,kBAAe,CAAC,GAAmB,EAAE,UAAgC,EAAE,EAAE;IACvE,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAA;IAEzF,GAAG,CAAC,YAAY,CAAC,GAAS,EAAE;QAC1B,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAC9C,MAAM,mBAAmB,GAAG,MAAM,IAAA,4BAAY,EAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YACrE,uCAAY,MAAM,KAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,IAAE;QACxD,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,IAAA,qBAAa,EAAC,aAAa,EAAE,kBAAkB,CAAC,CAAA;IAClD,CAAC,CAAA,CAAC,CAAA;IAEF,GAAG,CAAC,gBAAgB,CAAC,CAAC,aAAa,EAAE,EAAE;QACrC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;QACtD,aAAa,CAAC,IAAI,CAAC,OAAO,mCACrB,cAAc,KACjB,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC,EAAE;gBACpE,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE,SAAS,EAAE;aACtB,GACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACnC,MAAM,4BAA4B,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAA;QAErG,KAAK,CAAC,MAAM;aACT,IAAI,CAAC,QAAQ,CAAC;aACd,GAAG,CAAC,aAAa,CAAC;aAClB,OAAO,CAAC;YACP,OAAO,EAAE;gBACP,CAAC,4BAA4B,EAAE,EAAE,SAAS,EAAE,CAAC;aAC9C;SACF,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAuB;AAGvB,mDAA8C;AAC9C,mCAAqD;AACrD,oEAA+D;AAI/D,mDAAgC;AAEhC,MAAM,aAAa,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAA;AAEpG,kBAAe,CAAC,GAAmB,EAAE,UAAgC,EAAE,EAAE;IACvE,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAA;IAEzF,GAAG,CAAC,YAAY,CAAC,GAAS,EAAE;QAC1B,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAC9C,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,aAAa,CAAC,CAAA;QAC7C,MAAM,mBAAmB,GAAG,MAAM,IAAA,4BAAY,EAAC,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC9F,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YACrE,uCAAY,MAAM,KAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,IAAE;QACxD,CAAC,EAAE,SAAS,CAAC,CAAA;QACb,IAAA,qBAAa,EAAC,aAAa,EAAE,kBAAkB,CAAC,CAAA;IAClD,CAAC,CAAA,CAAC,CAAA;IAEF,GAAG,CAAC,gBAAgB,CAAC,CAAC,aAAa,EAAE,EAAE;QACrC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;QACtD,MAAM,8BAA8B,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAA;QACzG,aAAa,CAAC,IAAI,CAAC,OAAO,mCACrB,cAAc,KACjB,CAAC,8BAA8B,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,GAC3E,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACnC,MAAM,4BAA4B,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAA;QAErG,KAAK,CAAC,MAAM;aACT,IAAI,CAAC,QAAQ,CAAC;aACd,GAAG,CAAC,aAAa,CAAC;aAClB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,4BAA4B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -4,7 +4,7 @@ exports.pathTransform = void 0;
4
4
  const utils_1 = require("../utils");
5
5
  const pathTransform = (opt) => {
6
6
  return (path) => {
7
- const remoteAssetInfoMap = (0, utils_1.getCacheData)(opt.cacheFilePath) || {};
7
+ const remoteAssetInfoMap = (0, utils_1.getCacheData)(opt.cacheFilePath);
8
8
  const pathAliasRegMap = Object.keys(opt.pathAlias).reduce((result, key) => {
9
9
  return Object.assign(Object.assign({}, result), { [key]: new RegExp(`^${key}`) });
10
10
  }, {});
@@ -15,7 +15,7 @@ const pathTransform = (opt) => {
15
15
  return path;
16
16
  })();
17
17
  if (!remoteAssetInfoMap[localPath])
18
- return localPath;
18
+ return path;
19
19
  return remoteAssetInfoMap[localPath];
20
20
  };
21
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"path-transform.js","sourceRoot":"","sources":["../../src/path-transform/path-transform.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAO/B,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAE,EAAE;IACxC,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,kBAAkB,GAAG,IAAA,oBAAY,EAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;QAEhE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAChG,uCAAY,MAAM,KAAE,CAAC,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,IAAE;QACpD,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;YACtB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAChG,IAAI,cAAc;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;YACvG,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,EAAE,CAAA;QACJ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QACpD,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC,CAAA;AACH,CAAC,CAAA;AAhBY,QAAA,aAAa,iBAgBzB"}
1
+ {"version":3,"file":"path-transform.js","sourceRoot":"","sources":["../../src/path-transform/path-transform.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAO/B,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAE,EAAE;IACxC,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,kBAAkB,GAAG,IAAA,oBAAY,EAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAE1D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAChG,uCAAY,MAAM,KAAE,CAAC,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,IAAE;QACpD,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;YACtB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAChG,IAAI,cAAc;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;YACvG,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,EAAE,CAAA;QACJ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAA;QAC/C,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC,CAAA;AACH,CAAC,CAAA;AAhBY,QAAA,aAAa,iBAgBzB"}
@@ -1,6 +1,7 @@
1
1
  import { Uploader } from '../types';
2
2
  interface UploaderOpt {
3
3
  assetsDirPath?: string;
4
+ cacheData?: Record<string, any>;
4
5
  upload?: Uploader;
5
6
  }
6
7
  export declare const uploadAssets: (opt: UploaderOpt) => Promise<import("../types").RemoteAssetInfo[]>;
@@ -17,18 +17,23 @@ const promise_pool_1 = require("@supercharge/promise-pool");
17
17
  const utils_1 = require("../utils");
18
18
  const path_1 = __importDefault(require("path"));
19
19
  const uploadAssets = (opt) => __awaiter(void 0, void 0, void 0, function* () {
20
- const { assetsDirPath, upload } = opt;
20
+ const { assetsDirPath, cacheData, upload } = opt;
21
21
  if (!assetsDirPath || !upload)
22
22
  return [];
23
+ const uploadedAssetFileNames = Object.values(cacheData || {}).map(item => path_1.default.basename(new URL(item).pathname));
23
24
  const assetsPaths = (0, utils_1.travelFiles)(assetsDirPath);
24
- const { results: remoteAssetInfoList } = yield promise_pool_1.PromisePool.withConcurrency(2)
25
- .for(assetsPaths)
26
- .process((localPath) => __awaiter(void 0, void 0, void 0, function* () {
25
+ const assetsInfos = assetsPaths.reduce((result, localPath) => {
27
26
  const uniqueKey = (0, utils_1.generateFileUniqueKey)(localPath);
28
27
  const { ext } = path_1.default.parse(localPath);
29
- return upload({ localPath, uniqueKey, ext });
30
- }));
31
- return remoteAssetInfoList;
28
+ const isUploaded = uploadedAssetFileNames.includes(`${uniqueKey}${ext}`);
29
+ if (isUploaded)
30
+ return result;
31
+ return [...result, { localPath, ext, uniqueKey }];
32
+ }, []);
33
+ const { results: remoteAssetInfoList } = yield promise_pool_1.PromisePool.withConcurrency(2)
34
+ .for(assetsInfos)
35
+ .process((localAssetInfo) => __awaiter(void 0, void 0, void 0, function* () { return upload(localAssetInfo); }));
36
+ return remoteAssetInfoList.filter(Boolean);
32
37
  });
33
38
  exports.uploadAssets = uploadAssets;
34
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upload-assets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4DAAuD;AAEvD,mCAA4D;AAC5D,gDAAuB;AAOhB,MAAM,YAAY,GAAG,CAAO,GAAgB,EAAE,EAAE;IACrD,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;IAErC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAExC,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,aAAa,CAAC,CAAA;IAE9C,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM,0BAAW,CAAC,eAAe,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,WAAW,CAAC;SAChB,OAAO,CAAC,CAAO,SAAS,EAAE,EAAE;QAC3B,MAAM,SAAS,GAAG,IAAA,6BAAqB,EAAC,SAAS,CAAC,CAAA;QAClD,MAAM,EAAE,GAAG,EAAE,GAAG,cAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACrC,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;IAC9C,CAAC,CAAA,CAAC,CAAA;IAEJ,OAAO,mBAAmB,CAAA;AAC5B,CAAC,CAAA,CAAA;AAhBY,QAAA,YAAY,gBAgBxB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upload-assets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4DAAuD;AAEvD,mCAA4D;AAC5D,gDAAuB;AAQhB,MAAM,YAAY,GAAG,CAAO,GAAgB,EAAE,EAAE;IACrD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;IAEhD,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAExC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEhH,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,aAAa,CAAC,CAAA;IAE9C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC7E,MAAM,SAAS,GAAG,IAAA,6BAAqB,EAAC,SAAS,CAAC,CAAA;QAClD,MAAM,EAAE,GAAG,EAAE,GAAG,cAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACrC,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC,CAAA;QACxE,IAAI,UAAU;YAAE,OAAO,MAAM,CAAA;QAC7B,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IACnD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM,0BAAW,CAAC,eAAe,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,WAAW,CAAC;SAChB,OAAO,CAAC,CAAO,cAAc,EAAE,EAAE,kDAAC,OAAA,MAAM,CAAC,cAAc,CAAC,CAAA,GAAA,CAAC,CAAA;IAE5D,OAAO,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC5C,CAAC,CAAA,CAAA;AAtBY,QAAA,YAAY,gBAsBxB"}
package/dist/utils.js CHANGED
@@ -35,11 +35,14 @@ const getCacheData = (cacheFilePath) => {
35
35
  return JSON.parse(fs_1.default.readFileSync(cacheFilePath).toString());
36
36
  }
37
37
  catch (error) {
38
- return null;
38
+ return {};
39
39
  }
40
40
  };
41
41
  exports.getCacheData = getCacheData;
42
42
  const saveCacheData = (cacheFilePath, cacheData) => {
43
+ const cacheDirPath = path_1.default.dirname(cacheFilePath);
44
+ if (!fs_1.default.existsSync(cacheDirPath))
45
+ fs_1.default.mkdirSync(cacheDirPath, { recursive: true });
43
46
  fs_1.default.writeFileSync(cacheFilePath, JSON.stringify(cacheData));
44
47
  };
45
48
  exports.saveCacheData = saveCacheData;
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,8CAAqB;AAErB;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAY,EAAE;IACnD,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,KAAK,CAAC,MAAM,CAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAA;QACtE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC,CAAA;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC,CAAA;AAPY,QAAA,WAAW,eAOvB;AAED;;GAEG;AACI,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,EAAE;IACxD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,cAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAA;IAC1D,OAAO,IAAA,aAAG,EAAC,MAAM,CAAC,CAAA;AACpB,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC;AAEM,MAAM,YAAY,GAAG,CAAC,aAAoB,EAAO,EAAE;IACxD,IAAI,CAAC;QACH,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAPY,QAAA,YAAY,gBAOxB;AAEM,MAAM,aAAa,GAAG,CAAC,aAAoB,EAAE,SAAa,EAAE,EAAE;IACnE,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAEM,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAAf,QAAA,IAAI,QAAW"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,8CAAqB;AAErB;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAY,EAAE;IACnD,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,KAAK,CAAC,MAAM,CAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAA;QACtE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC,CAAA;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC,CAAA;AAPY,QAAA,WAAW,eAOvB;AAED;;GAEG;AACI,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,EAAE;IACxD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,cAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAA;IAC1D,OAAO,IAAA,aAAG,EAAC,MAAM,CAAC,CAAA;AACpB,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC;AAEM,MAAM,YAAY,GAAG,CAAC,aAAoB,EAAO,EAAE;IACxD,IAAI,CAAC;QACH,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAPY,QAAA,YAAY,gBAOxB;AAEM,MAAM,aAAa,GAAG,CAAC,aAAoB,EAAE,SAAa,EAAE,EAAE;IACnE,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAChD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACjF,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAA;AAJY,QAAA,aAAa,iBAIzB;AAEM,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAAf,QAAA,IAAI,QAAW"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taro-minify-pack/plugin-remote-assets",
3
- "version": "0.0.4",
3
+ "version": "0.0.5-alpha.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -2,35 +2,34 @@ import path from 'path'
2
2
  import { RemoteAssetPluginOpt } from '@/types'
3
3
  import { IPluginContext } from '@tarojs/service'
4
4
  import { uploadAssets } from './upload-assets'
5
- import { saveCacheData } from './utils'
5
+ import { getCacheData, saveCacheData } from './utils'
6
6
  import { pathTransform } from '@/path-transform/path-transform'
7
7
 
8
8
  export { RemoteAssetPluginOpt } from '@/types'
9
9
 
10
10
  export * from './upload-adapter'
11
11
 
12
- const cacheFilePath = path.resolve(__dirname, 'remote-assets-cache.json')
12
+ const cacheFilePath = path.resolve(process.cwd(), 'node_modules', '.cache/remote-assets-cache.json')
13
13
 
14
14
  export default (ctx: IPluginContext, pluginOpts: RemoteAssetPluginOpt) => {
15
15
  const transform = pathTransform({ cacheFilePath, pathAlias: pluginOpts.pathAlias || {} })
16
16
 
17
17
  ctx.onBuildStart(async () => {
18
18
  const { assetsDirPath, uploader } = pluginOpts
19
- const remoteAssetInfoList = await uploadAssets({ assetsDirPath, upload: uploader })
19
+ const cacheData = getCacheData(cacheFilePath)
20
+ const remoteAssetInfoList = await uploadAssets({ assetsDirPath, cacheData, upload: uploader })
20
21
  const remoteAssetInfoMap = remoteAssetInfoList.reduce((result, item) => {
21
22
  return { ...result, [item.localPath]: item.remoteUrl }
22
- }, {})
23
+ }, cacheData)
23
24
  saveCacheData(cacheFilePath, remoteAssetInfoMap)
24
25
  })
25
26
 
26
27
  ctx.modifyRunnerOpts((curRunnerOpts) => {
27
28
  const { postcss: curPostcssOpts } = curRunnerOpts.opts
29
+ const postCssPluginPathTransformPath = path.resolve(__dirname, './path-transform/path-transform-postcss')
28
30
  curRunnerOpts.opts.postcss = {
29
31
  ...curPostcssOpts,
30
- [path.resolve(__dirname, './path-transform/path-transform-postcss')]: {
31
- enabled: true,
32
- config: { transform }
33
- }
32
+ [postCssPluginPathTransformPath]: { enabled: true, config: { transform } }
34
33
  }
35
34
  })
36
35
 
@@ -40,10 +39,6 @@ export default (ctx: IPluginContext, pluginOpts: RemoteAssetPluginOpt) => {
40
39
  chain.module
41
40
  .rule('script')
42
41
  .use('babelLoader')
43
- .options({
44
- plugins: [
45
- [babelPluginPathTransformPath, { transform }]
46
- ]
47
- })
42
+ .options({ plugins: [[babelPluginPathTransformPath, { transform }]] })
48
43
  })
49
44
  }
@@ -7,7 +7,7 @@ interface Opt{
7
7
 
8
8
  export const pathTransform = (opt: Opt) => {
9
9
  return (path: string) => {
10
- const remoteAssetInfoMap = getCacheData(opt.cacheFilePath) || {}
10
+ const remoteAssetInfoMap = getCacheData(opt.cacheFilePath)
11
11
 
12
12
  const pathAliasRegMap = Object.keys(opt.pathAlias).reduce<Record<string, RegExp>>((result, key) => {
13
13
  return { ...result, [key]: new RegExp(`^${key}`) }
@@ -18,7 +18,7 @@ export const pathTransform = (opt: Opt) => {
18
18
  if (matchPathAlias) return path.replace(pathAliasRegMap[matchPathAlias], opt.pathAlias[matchPathAlias])
19
19
  return path
20
20
  })()
21
- if (!remoteAssetInfoMap[localPath]) return localPath
21
+ if (!remoteAssetInfoMap[localPath]) return path
22
22
  return remoteAssetInfoMap[localPath]
23
23
  }
24
24
  }
@@ -1,27 +1,34 @@
1
1
  import { PromisePool } from '@supercharge/promise-pool'
2
- import { Uploader } from '@/types'
2
+ import { LocalAssetInfo, Uploader } from '@/types'
3
3
  import { generateFileUniqueKey, travelFiles } from '@/utils'
4
4
  import path from 'path'
5
5
 
6
6
  interface UploaderOpt {
7
7
  assetsDirPath?: string,
8
+ cacheData?:Record<string, any>
8
9
  upload?: Uploader
9
10
  }
10
11
 
11
12
  export const uploadAssets = async (opt: UploaderOpt) => {
12
- const { assetsDirPath, upload } = opt
13
+ const { assetsDirPath, cacheData, upload } = opt
13
14
 
14
15
  if (!assetsDirPath || !upload) return []
15
16
 
17
+ const uploadedAssetFileNames = Object.values(cacheData || {}).map(item => path.basename(new URL(item).pathname))
18
+
16
19
  const assetsPaths = travelFiles(assetsDirPath)
17
20
 
21
+ const assetsInfos = assetsPaths.reduce<LocalAssetInfo[]>((result, localPath) => {
22
+ const uniqueKey = generateFileUniqueKey(localPath)
23
+ const { ext } = path.parse(localPath)
24
+ const isUploaded = uploadedAssetFileNames.includes(`${uniqueKey}${ext}`)
25
+ if (isUploaded) return result
26
+ return [...result, { localPath, ext, uniqueKey }]
27
+ }, [])
28
+
18
29
  const { results: remoteAssetInfoList } = await PromisePool.withConcurrency(2)
19
- .for(assetsPaths)
20
- .process(async (localPath) => {
21
- const uniqueKey = generateFileUniqueKey(localPath)
22
- const { ext } = path.parse(localPath)
23
- return upload({ localPath, uniqueKey, ext })
24
- })
25
-
26
- return remoteAssetInfoList
30
+ .for(assetsInfos)
31
+ .process(async (localAssetInfo) => upload(localAssetInfo))
32
+
33
+ return remoteAssetInfoList.filter(Boolean)
27
34
  }
package/src/utils.ts CHANGED
@@ -28,11 +28,13 @@ export const getCacheData = (cacheFilePath:string): any => {
28
28
  fs.accessSync(cacheFilePath)
29
29
  return JSON.parse(fs.readFileSync(cacheFilePath).toString())
30
30
  } catch (error) {
31
- return null
31
+ return {}
32
32
  }
33
33
  }
34
34
 
35
35
  export const saveCacheData = (cacheFilePath:string, cacheData:any) => {
36
+ const cacheDirPath = path.dirname(cacheFilePath)
37
+ if (!fs.existsSync(cacheDirPath)) fs.mkdirSync(cacheDirPath, { recursive: true })
36
38
  fs.writeFileSync(cacheFilePath, JSON.stringify(cacheData))
37
39
  }
38
40