Fix bundler issue with webpack 5
As explained in issue #1844 and in issue https://github.com/webpack/webpack/issues/15007#issuecomment-996615250, the way we used the `browser`-field was wrong. The main reason for using the `browser`-field is the requirement of `require('fs')` in the main-entry-file. The workaround for this was using `require('handlebars/lib/handlebars')`, but now it will also work via `require('handlebars')` for bundlers that respect the `browser`-field. The `"./runtime"`-config was removed, because it didn't have any effect. In order to detect regressions, the webpack-integration test was extended to test with different webpack versions. Fixes #1174 Closes #1844
This commit is contained in:
+1
-4
@@ -76,10 +76,7 @@
|
|||||||
},
|
},
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "types/index.d.ts",
|
"types": "types/index.d.ts",
|
||||||
"browser": {
|
"browser": "./dist/cjs/handlebars.js",
|
||||||
".": "./dist/cjs/handlebars.js",
|
|
||||||
"./runtime": "./dist/cjs/handlebars.runtime.js"
|
|
||||||
},
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"handlebars": "bin/handlebars"
|
"handlebars": "bin/handlebars"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "webpack-test",
|
"name": "webpack-test",
|
||||||
"description": "Various tests with Handlebars and Webpack",
|
"description": "Various tests with Handlebars and multiple webpack versions",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -8,14 +8,8 @@
|
|||||||
"test": "node dist/main.js"
|
"test": "node dist/main.js"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"keywords": [],
|
"dependencies": {
|
||||||
"author": "",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {},
|
|
||||||
"devDependencies": {
|
|
||||||
"handlebars": "file:../../..",
|
"handlebars": "file:../../..",
|
||||||
"handlebars-loader": "^1.7.1",
|
"handlebars-loader": "^1.7.1"
|
||||||
"webpack": "^4.39.3",
|
|
||||||
"webpack-cli": "^3.3.7"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import Handlebars from 'handlebars/lib/handlebars';
|
||||||
|
import { assertEquals } from './lib/assert';
|
||||||
|
|
||||||
|
const template = Handlebars.compile('Author: {{author}}');
|
||||||
|
assertEquals(template({ author: 'Yehuda' }), 'Author: Yehuda');
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
import * as Handlebars from 'handlebars/runtime';
|
||||||
|
import { assertEquals } from './lib/assert';
|
||||||
|
|
||||||
|
const template = Handlebars.template({
|
||||||
|
compiler: [8, '>= 4.3.0'],
|
||||||
|
main: function(container, depth0, helpers, partials, data) {
|
||||||
|
var helper,
|
||||||
|
lookupProperty =
|
||||||
|
container.lookupProperty ||
|
||||||
|
function(parent, propertyName) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
|
||||||
|
return parent[propertyName];
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
'Author: ' +
|
||||||
|
container.escapeExpression(
|
||||||
|
((helper =
|
||||||
|
(helper =
|
||||||
|
lookupProperty(helpers, 'author') ||
|
||||||
|
(depth0 != null ? lookupProperty(depth0, 'author') : depth0)) !=
|
||||||
|
null
|
||||||
|
? helper
|
||||||
|
: container.hooks.helperMissing),
|
||||||
|
typeof helper === 'function'
|
||||||
|
? helper.call(depth0 != null ? depth0 : container.nullContext || {}, {
|
||||||
|
name: 'author',
|
||||||
|
hash: {},
|
||||||
|
data: data,
|
||||||
|
loc: {
|
||||||
|
start: { line: 1, column: 8 },
|
||||||
|
end: { line: 1, column: 18 }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
: helper)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
useData: true
|
||||||
|
});
|
||||||
|
assertEquals(template({ author: 'Yehuda' }), 'Author: Yehuda');
|
||||||
@@ -2,15 +2,26 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
run_tests () {
|
||||||
|
for i in dist/*-test.js ; do
|
||||||
|
echo "----------------------"
|
||||||
|
echo "-- Running $i"
|
||||||
|
echo "----------------------"
|
||||||
|
node "$i"
|
||||||
|
echo "Success"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Cleanup: package-lock and "npm ci" is not working with local dependencies
|
# Cleanup: package-lock and "npm ci" is not working with local dependencies
|
||||||
rm dist package-lock.json -rf
|
rm dist package-lock.json -rf
|
||||||
npm install --legacy-peer-deps
|
npm install --legacy-peer-deps
|
||||||
npm run build
|
|
||||||
|
|
||||||
for i in dist/*-test.js ; do
|
# Test with webpack 4
|
||||||
echo "----------------------"
|
npm install --legacy-peer-deps --no-save webpack@^4 webpack-cli@^3
|
||||||
echo "-- Running $i"
|
npm run build
|
||||||
echo "----------------------"
|
run_tests
|
||||||
node "$i"
|
|
||||||
echo "Success"
|
# Test with webpack 5
|
||||||
done
|
npm install --legacy-peer-deps --no-save webpack@^5 webpack-cli@^4
|
||||||
|
npm run build
|
||||||
|
run_tests
|
||||||
Reference in New Issue
Block a user