@taro-minify-pack/plugin-remote-assets 0.0.3 → 0.0.5-alpha.0
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/dist/index.js +7 -12
- package/dist/index.js.map +1 -1
- package/dist/path-transform/path-transform.js +1 -1
- package/dist/path-transform/path-transform.js.map +1 -1
- package/dist/upload-assets/index.d.ts +1 -0
- package/dist/upload-assets/index.js +12 -7
- package/dist/upload-assets/index.js.map +1 -1
- package/dist/utils.js +4 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +8 -13
- package/src/path-transform/path-transform.ts +1 -1
- package/src/upload-assets/index.ts +17 -10
- package/src/utils.ts +3 -1
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(
|
|
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
|
|
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
|
-
|
|
48
|
-
|
|
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,
|
|
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
|
}, {});
|
|
@@ -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,
|
|
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,SAAS,CAAA;QACpD,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC,CAAA;AACH,CAAC,CAAA;AAhBY,QAAA,aAAa,iBAgBzB"}
|
|
@@ -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
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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;
|
|
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
|
|
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,
|
|
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
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(
|
|
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
|
|
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
|
-
[
|
|
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}`) }
|
|
@@ -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(
|
|
20
|
-
.process(async (
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
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
|
|