Merge pull request #5 from weexteam/hotfix-ignore-same-name
Hotfix ignore same name
diff --git a/package.json b/package.json
index 027a8ec..1c99ba4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "weex-loader",
- "version": "0.2.1",
+ "version": "0.2.3",
"description": "a webpack loader for weex",
"main": "index.js",
"author": "terrykingcha <terrykingcha@gmail.com>",
diff --git a/src/parser.js b/src/parser.js
index 03b9a80..cb16ad0 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -14,6 +14,7 @@
getNameByPath,
checkFileExist,
depHasRequired,
+ parseElementNameByPath,
stringifyFunction,
appendToWarn
} from './util'
@@ -121,7 +122,14 @@
let requireContent = ''
if (deps.length) {
- requireContent += deps.map(dep =>
+ const entryElementName = parseElementNameByPath(params.resourcePath)
+ requireContent += deps.filter(dep => {
+ if (parseElementNameByPath(dep) === entryElementName) {
+ console.warn(`[Warn]: "${dep}" cannot include <${entryElementName}> itself.`)
+ return false
+ }
+ return true
+ }).map(dep =>
depHasRequired(content, dep) ? 'require("' + dep + '");' : ''
).join('\n')
if (requireContent) {
@@ -232,7 +240,7 @@
.replace(MODULE_EXPORTS_REG, '__weex_module__.exports')
.replace(REQUIRE_REG, '__weex_require__($1$2$1)')
target = ';__weex_define__("@weex-component/' + name + '", [], ' +
- 'function(__weex_require__, __weex_exports__, __weex_module__)' +
+ 'function(__weex_require__, exports, __weex_module__)' +
'{\n' + target + '\n})'
// record mapOffset into sourcemap
@@ -255,4 +263,3 @@
return Promise.resolve(prefix + target)
}
-
diff --git a/src/util.js b/src/util.js
index d631779..629f1e3 100644
--- a/src/util.js
+++ b/src/util.js
@@ -44,3 +44,7 @@
export function depHasRequired (content, dep) {
return !content.match(new RegExp('require\\(["\']./' + path.basename(dep) + '(.we)?["\']\\)', 'g'))
}
+
+export function parseElementNameByPath (filepath) {
+ return path.parse(filepath).name
+}
diff --git a/test/expect/exports.we b/test/expect/exports.we
new file mode 100644
index 0000000..731b20a
--- /dev/null
+++ b/test/expect/exports.we
@@ -0,0 +1,11 @@
+<template>
+ <div>
+ <text>{{foo}}</text>
+ </div>
+</template>
+
+<script>
+ exports.data = {
+ foo: 'Hello'
+ }
+</script>
diff --git a/test/expect/samename.we b/test/expect/samename.we
new file mode 100644
index 0000000..9020bf9
--- /dev/null
+++ b/test/expect/samename.we
@@ -0,0 +1,3 @@
+<template>
+ <samename></samename>
+</template>
diff --git a/test/test.js b/test/test.js
index e2a616d..fb27960 100644
--- a/test/test.js
+++ b/test/test.js
@@ -81,6 +81,16 @@
expect(actualJson).eql(expectJson);
});
+ it('ignore include same name element file', function() {
+ var name = 'samename.js';
+
+ var actualCodePath = path.resolve(__dirname, 'actual', name);
+ var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
+
+ var matches = actualCodeContent.match(/"type"\: "samename"/g)
+ expect(matches.length).eql(1);
+ });
+
it('support source map', function() {
var name = 'sourcemap'
@@ -129,4 +139,23 @@
checkPos(/console\.log\(9\)/)
checkPos(/console\.log\(0\)/)
})
+
+ it('exports case', function() {
+ var name = 'exports.js';
+
+ var actualCodePath = path.resolve(__dirname, 'actual', name);
+ var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
+
+ var expectCodePath = path.resolve(__dirname, 'expect', name);
+ var expectCodeContent = fs.readFileSync(expectCodePath, { encoding: 'utf8' });
+
+
+ var actualResult = createInstance('actual/' + name, actualCodeContent);
+ var actualJson = getRoot('actual/' + name);
+
+ var expectResult = createInstance('expect/' + name, expectCodeContent);
+ var expectJson = getRoot('expect/' + name);
+
+ expect(actualJson).eql(expectJson);
+ });
})
diff --git a/test/webpack.config.js b/test/webpack.config.js
index 68792f3..5266dae 100644
--- a/test/webpack.config.js
+++ b/test/webpack.config.js
@@ -3,6 +3,8 @@
module.exports = {
entry: {
sourcemap: path.resolve(__dirname, 'expect/sourcemap.we?entry=true'),
+ samename: path.resolve(__dirname, 'expect/samename.we?entry=true'),
+ exports: path.resolve(__dirname, 'expect/exports.we?entry=true'),
a: path.resolve(__dirname, 'a.js?entry=true'),
b: path.resolve(__dirname, 'expect/b.we?entry=true'),
z: path.resolve(__dirname, 'expect/z.we?entry=true')
@@ -26,15 +28,15 @@
loaders: ['index.js?type=script', 'babel?presets[]=es2015']
},
{
- test: /\.css(\?[^?]+)?$/,
+ test: /\.css(\?[^?]+)?$/,
loaders: ['index.js?type=style']
},
{
- test: /\.less(\?[^?]+)?$/,
+ test: /\.less(\?[^?]+)?$/,
loaders: ['index.js?type=style', 'less']
},
{
- test: /\.tpl(\?[^?]+)?$/,
+ test: /\.tpl(\?[^?]+)?$/,
loaders: ['index.js?type=tpl']
}
]