Skip to content

Commit

Permalink
fix(mp): improve find-module-id logic #929
Browse files Browse the repository at this point in the history
  • Loading branch information
fxy060608 committed Nov 21, 2019
1 parent b4d9fad commit 08fabd9
Showing 1 changed file with 43 additions and 25 deletions.
68 changes: 43 additions & 25 deletions packages/webpack-uni-mp-loader/lib/plugin/generate-component.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,52 @@ const {
} = require('../shared')

const uniPath = normalizePath(require.resolve('@dcloudio/uni-' + process.env.UNI_PLATFORM))

function findModule (modules, resource, altResource) {
return modules.find(
module => {
let moduleResource = module.resource
if (
!moduleResource ||
(
moduleResource.indexOf('.vue') === -1 &&
moduleResource.indexOf('.nvue') === -1
)
) {
return
}
moduleResource = removeExt(module.resource)
return moduleResource === resource || moduleResource === altResource
}
)
}

function findModuleId (modules, resource, altResource) {
const module = findModule(modules, resource, altResource)
return module && module.id
}

function findModuleIdFromConcatenatedModules (modules, resource, altResource) {
const module = modules.find(module => {
return findModule(module.modules, resource, altResource)
})
return module && module.id
}

function findComponentModuleId (modules, concatenatedModules, resource, altResource) {
return findModuleId(modules, resource, altResource) ||
findModuleIdFromConcatenatedModules(concatenatedModules, resource, altResource) ||
resource
}

// TODO 解决方案不太理想
module.exports = function generateComponent (compilation) {
const components = getComponentSet()
if (components.size) {
const assets = compilation.assets
const modules = compilation.modules

const concatenatedModules = modules.filter(module => module.modules)
const uniModuleId = modules.find(module => module.resource && normalizePath(module.resource) === uniPath).id

Object.keys(assets).forEach(name => {
Expand All @@ -30,31 +69,10 @@ module.exports = function generateComponent (compilation) {
const modulePath = removeExt(restoreNodeModules(name))
const resource = normalizePath(path.resolve(process.env.UNI_INPUT_DIR, '..', modulePath))
const altResource = normalizePath(path.resolve(process.env.UNI_INPUT_DIR, modulePath))
moduleId = modules.find(
module => {
if (module.resource) {
const moduleResource = removeExt(module.resource)
return (
module.resource.indexOf('.vue') !== -1 ||
module.resource.indexOf('.nvue') !== -1
) &&
(
moduleResource === resource ||
moduleResource === altResource
)
}
}).id
moduleId = findComponentModuleId(modules, concatenatedModules, resource, altResource)
} else {
const resource = removeExt(path.resolve(process.env.UNI_INPUT_DIR, name))
moduleId = modules.find(
module => {
return module.resource &&
(
module.resource.indexOf('.vue') !== -1 ||
module.resource.indexOf('.nvue') !== -1
) &&
removeExt(module.resource) === resource
}).id
moduleId = findComponentModuleId(modules, concatenatedModules, resource)
}

const origSource = assets[name].source()
Expand All @@ -66,7 +84,7 @@ module.exports = function generateComponent (compilation) {
beforeCode = ';my.defineComponent || (my.defineComponent = Component);'
}
const source = beforeCode + origSource +
`
`
;(${globalVar}["webpackJsonp"] = ${globalVar}["webpackJsonp"] || []).push([
'${chunkName}',
{
Expand All @@ -75,7 +93,7 @@ module.exports = function generateComponent (compilation) {
})
},
[['${chunkName}']]
]);
]);
`
assets[name] = {
size () {
Expand Down

0 comments on commit 08fabd9

Please sign in to comment.