停止 Babel 编译 jsx 代码?
Stop Babel compiling jsx code?
大部分信息和答案都是关于 babel 没有编译成 JSX 的问题。在我的例子中,我使用 .jsx 作为模板引擎,所以我希望 babel 编译 .js 文件而不是 .jsx 文件。我仍然想将文件复制到 build/dist 文件夹。
我的应用结构是:
App/
├── dist/
├── styles/
│ ├── _main.scss
│ ├── _module.scss
│ └── index.scss
├── assets/
│ ├── index.css
│ └── image.jpg
├── views/
│ ├── main.jsx
│ └── component.jsx
├── server.js
├── Models.js
├── Schemas.js
└── package.json
我试过了
babel src -d dist --ignore styles,*.jsx --copy-files views --presets es2015
它似乎无法识别视图文件夹
babel src -d dist --ignore styles --copy-files --presets es2015
它做事正确,但也会编译 .jsx,这会破坏视图。
我也考虑过删除 babel-loader 包,但不确定这样做是否过头了。
我想不出您可能需要回答的更多信息,但如果您希望我放置 package.json 或任何其他文件,请告诉我。
更新
--ignore
和 --copy-files
似乎有些混淆。有些人希望忽略覆盖复制,而其他人则希望复制覆盖忽略。就我而言,后者更可取。
https://github.com/babel/babel/issues/5052
https://github.com/babel/babel/issues/5176
现在,如果我这样做
babel src --out-dir dist --copy-files --ignore styles,*jsx --presets es2015
它会忽略 .jsx 文件,但不会复制它们。它确实忽略了样式目录,这是正确的。它似乎无法忽略它可以转译的东西。
--copy-files
option 复制未处理的文件 'as is'。它不接受它们类似于 --copy-files views
.
的文件
--ignore
option 完全忽略文件,这是不受欢迎的行为。
问题在于 Babel 处理 .jsx 文件,而不是它编译 JSX。如果未指定 react
预设,Babel 不会编译 JSX 语法,因此它被视为语法错误。发生这种情况是因为它 processes .jsx files by default。解决方案是使用 --extensions
选项覆盖默认值:
babel src -d dist --extensions .js --copy-files --presets es2015
这应该将所有 .js 文件从 ES6 转换为 ES5,然后只复制其他所有内容。
应该提到的是,Babel 只是一个转译器,可能不是执行复杂文件操作任务的正确工具。这就是 Grunt 和 Gulp 等专用自动化工具的用途。
大部分信息和答案都是关于 babel 没有编译成 JSX 的问题。在我的例子中,我使用 .jsx 作为模板引擎,所以我希望 babel 编译 .js 文件而不是 .jsx 文件。我仍然想将文件复制到 build/dist 文件夹。
我的应用结构是:
App/
├── dist/
├── styles/
│ ├── _main.scss
│ ├── _module.scss
│ └── index.scss
├── assets/
│ ├── index.css
│ └── image.jpg
├── views/
│ ├── main.jsx
│ └── component.jsx
├── server.js
├── Models.js
├── Schemas.js
└── package.json
我试过了
babel src -d dist --ignore styles,*.jsx --copy-files views --presets es2015
它似乎无法识别视图文件夹
babel src -d dist --ignore styles --copy-files --presets es2015
它做事正确,但也会编译 .jsx,这会破坏视图。
我也考虑过删除 babel-loader 包,但不确定这样做是否过头了。
我想不出您可能需要回答的更多信息,但如果您希望我放置 package.json 或任何其他文件,请告诉我。
更新
--ignore
和 --copy-files
似乎有些混淆。有些人希望忽略覆盖复制,而其他人则希望复制覆盖忽略。就我而言,后者更可取。
https://github.com/babel/babel/issues/5052 https://github.com/babel/babel/issues/5176
现在,如果我这样做
babel src --out-dir dist --copy-files --ignore styles,*jsx --presets es2015
它会忽略 .jsx 文件,但不会复制它们。它确实忽略了样式目录,这是正确的。它似乎无法忽略它可以转译的东西。
--copy-files
option 复制未处理的文件 'as is'。它不接受它们类似于 --copy-files views
.
--ignore
option 完全忽略文件,这是不受欢迎的行为。
问题在于 Babel 处理 .jsx 文件,而不是它编译 JSX。如果未指定 react
预设,Babel 不会编译 JSX 语法,因此它被视为语法错误。发生这种情况是因为它 processes .jsx files by default。解决方案是使用 --extensions
选项覆盖默认值:
babel src -d dist --extensions .js --copy-files --presets es2015
这应该将所有 .js 文件从 ES6 转换为 ES5,然后只复制其他所有内容。
应该提到的是,Babel 只是一个转译器,可能不是执行复杂文件操作任务的正确工具。这就是 Grunt 和 Gulp 等专用自动化工具的用途。