Как заставить работать webpack2 и загрузчик шаблонов подчеркивания + babel без получения сообщения "Ошибка сборки модуля: SyntaxError: 'with' в строгом режиме (5:0)"
У меня есть загрузчик шаблонов подчеркивания в моем конфиге webpack2, который переносится с babel. Это не удается во время компиляции, потому что with
используется в коде скомпилированного кода. Вот соответствующая часть в моих загрузчиках в webpack.config.js
:
У меня есть этот раздел под загрузчиками:
{
test: /\.html$/,
use: [
{
loader: 'babel-loader',
query: {
presets: [
['es2015', { modules: false }],
'es2016',
'es2017',
'stage-3',
],
},
},
{
loader: 'ejs-loader',
},
],
};
Вот чего я хочу и получаю:
ERROR in ./src/table/row.html
Module build failed: SyntaxError: 'with' in strict mode (5:0)
3 | var __t, __p = '', __e = _.escape, __j = Array.prototype.join;
4 | function print() { __p += __j.call(arguments, '') }
> 5 | with (obj) {
| ^
6 |
7 | _.each(tableKeys, (k) => { ;
8 | __p += '\n <td>' +
Если я удалю babel
часть полностью работает, но с кодом ES6 не передается:
{
test: /\.html$/,
use: [
{
loader: 'ejs-loader',
},
],
};
Я также видел этот вопрос об удалении строгого режима и пробовал несколько вещей, связанных с применением es2015 строгого режима. Я думаю, что попробовал каждое решение в этом вопросе, включая обходной путь исправления, и я все еще получаю ту же ошибку. В конце концов я попробовал это:
{
test: /\.html$/,
use: [
{
loader: 'babel-loader',
query: {
presets: [
],
},
},
{
loader: 'ejs-loader',
},
],
};
Хотя я должен сделать то же самое, что и без прохода bable, но здесь я получаю ту же ошибку. Как-то без всяких пресетов я получаю такую же ошибку.
РЕДАКТИРОВАТЬ
Я также попытался обойти это мимоходом variable
в query
и я сделал эту работу с ejs-loader
Однако я не ищу решение, в котором все шаблоны нужно менять.
Я сделал хранилище, которое иллюстрирует проблему. Мастер ветка прокомментировала babel-loader и работает с with
в то время как transpile
ветка будет иметь ошибки компиляции, хотя { modules: false }
прошло, и у меня есть ветка под названием transpile-no-presets
где все пресеты в package.json удалены и ошибка все еще отображается.
1 ответ
По умолчанию подчеркивание .template
поместите ваши данные в область, используя with
заявление. Смотрите Подчеркнуть документы.
Я думаю, что самое чистое решение - проинструктировать ejs-loader
не компилировать в with
заявления, но вместо этого использовать временную переменную:
{
loader: 'ejs-loader?variable=data',
},
... и измените ваши шаблоны для ссылки на временную переменную.
От:
<ul>
<% _.each(test, (n) => { %>
<li>This is line number <%- n %></li>
<% }); %>
</ul>
чтобы:
<ul>
<% _.each(data.test, (n) => { %>
<li>This is line number <%- n %></li>
<% }); %>
</ul>