ParseError: ‘import’ and ‘export’ may appear only with ‘sourceType: module

首先这个错误是Browserify报出来的,看着网上一篇篇给babel加preset的解决方案让我一度以为这是babel出问题了。

解决方案,添加模块npm i esmify 。

然后在browserify的plugin里添加一个require('esmify') ,就可以解决以上报错。

举例

browserify({
	basedir:dir,
	debug: true,
	plugin: [
		[ require('esmify') ],
	],
})

 

============================以下是旧文============================

但我按照那些方案依然不能解决这个问题,比如加stage-0,还有加es2015的preset之类的,另外现在这些preset已经被弃用了,官方推荐用preset-env来代替。而我手动加了commonjs的plugin也一样报错。

一番研究之后发现我其他所有es模块被引用都能正常打包,唯独node_module里面的一个模块的es6模块不能加载,看来Browserify是默认不允许node_module里的模块以es6格式输出模块的。所以解决方案是要么把文件从node_module里移出来,要么想办法让Browserify允许node_module以es6输出模块,我最后用的是前者,因为那个sourceType:module我怎么设置也依然没有效果。

PHP输出内容到控制台

有时候本地开发的时候会使用php -S 命令启动一个服务器来调试,由于该web服务器模式直接echo会把内容输出到页面上,所以需要想办法把内容输出到控制台界面。

php里有几个php:// 开头的特殊读写流可以使用,文档见此:https://www.php.net/manual/en/wrappers.php.php

虽然该页面上说有常量STDINSTDOUT 和STDERR ,但是不知道为啥使用它们会报错不存在常量,所以我们可以自己定义:

define('STDOUT',fopen('php://stdout', 'a'));
define('STDERR',fopen('php://stderr', 'a'));
define('STDIN',fopen('php://stdin', 'r'));

然后就可以定义自己的输出函数来输出到控制台了
function stdout($c){
	fwrite(STDOUT, $c);
}
function stdoutl($c){
	stdout($c.PHP_EOL);
}

stdoutl("poi");//输出到控制台,并换一行